17,090
社区成员
发帖
与我相关
我的任务
分享
declare intablename varchar2(200):='test_zkm';
pkfieldname varchar2(200);
vsql varchar2(500);
swapvalue integer:=0;
outvalue varchar2(500);
BEGIN
--select count(1) into outvalue from test_zkm where tid='1';
vsql := 'select max(a.column_name) from user_cons_columns a,user_constraints b where a.constraint_name=b.constraint_name and b.TABLE_NAME=:itabname and b.constraint_type=''P''';
--使用聚合函数,如果没有符合条件的记录,返回空值。
execute immediate vsql into pkfieldname using upper(intablename);
if pkfieldname is null then
dbms_output.put_line('the result is null or is empty');
--outvalue := ''; 这个没有必要,没有赋值默认就是null
else
dbms_output.put_line('the result is not null');
--处理最大值
vsql := 'select max(' || pkfieldname || ') from ' || intablename;
--怎么处理数据为null的情况?
execute immediate vsql into swapvalue;
swapvalue:= swapvalue +1;
outvalue := swapvalue;
end if;
dbms_output.put_line(outvalue);
END;
declare
intablename varchar2(200):='test_zkm';
pkfieldname varchar2(200);
vsql varchar2(500);
swapvalue integer:=0;
outvalue varchar2(500);
BEGIN
pkfieldname := ''; --因为这里初始化是NULL,所以不用考虑第一个sql语句返回NULL的情况
vsql := 'select a.column_name from user_cons_columns a,user_constraints b where a.constraint_name=b.constraint_name and b.TABLE_NAME=:itabname and b.constraint_type=''P'''; --这里我没看懂,你找出主键所在列干嘛用,他存不存在和[result is null or is empty]有什么关系?况且如果是复合主键直接报too_many_rows异常。
execute immediate vsql into pkfieldname using upper(intablename);
if nvl(pkfieldname,'')= '' then
dbms_output.put_line('the result is null or is empty');
outvalue := '';
else
dbms_output.put_line('the result is not null');
vsql := 'select nvl(max(' || pkfieldname || '),0) from ' || intablename;
--这里加了一个nvl函数就能满足你的要求。
execute immediate vsql into swapvalue;
swapvalue:= swapvalue +1;
outvalue := swapvalue;
end if;
dbms_output.put_line(outvalue);
END;