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';
pkfieldname := '';
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''';
--怎么处理数据为null的情况?
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 max(' || pkfieldname || ') from ' || intablename;
--怎么处理数据为null的情况?
execute immediate vsql into swapvalue;
swapvalue:= swapvalue +1;
outvalue := swapvalue;
end if;
dbms_output.put_line(outvalue);
END;--备注
以上是代码,我的问题是在执行 execute immediate vsql into pkfieldname using upper(intablename);的时候当结果为null的情况下如何处理,除了在这之前用count先判断的方法,谢谢
pkfieldname varchar2(200);
vsql varchar2(500);
swapvalue integer:=0;
outvalue varchar2(500);
BEGIN
--select count(1) into outvalue from test_zkm where tid='1';
pkfieldname := '';
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''';
--怎么处理数据为null的情况?
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 max(' || pkfieldname || ') from ' || intablename;
--怎么处理数据为null的情况?
execute immediate vsql into swapvalue;
swapvalue:= swapvalue +1;
outvalue := swapvalue;
end if;
dbms_output.put_line(outvalue);
END;--备注
以上是代码,我的问题是在执行 execute immediate vsql into pkfieldname using upper(intablename);的时候当结果为null的情况下如何处理,除了在这之前用count先判断的方法,谢谢
select 0 from dual where 1 = 0;
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;
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;