在存储过程中执行一个sql语句,如果执行后没有结果,就会报错.想在结果为空的时候执行另一个操作,怎么判断结果为空呢?(结果为两个字段)
------最佳解决方案--------------------
是select into 语句吗?捕获异常后处理。
(如果是update语句,可以在update语句之后用if SQL%NOTFOUND then)
declare
l_name varchar2(100);
begin
select ename into l_name from emp where empno = 10;
dbms_output.put_line(l_name);
exception
when NO_DATA_FOUND then
dbms_output.put_line('not found');
end;
------其他解决方案--------------------
if SQL%NOTFOUND then
...
end if
------其他解决方案--------------------
可以说明白点吗?
------其他解决方案--------------------
试试这个:
RecordCount number;
select count(1) from table into RecordCount where ……;
if RecordCount = 0 then
……
end if;
------其他解决方案--------------------
只有update语句才能用SQL %NOTFOUND 吗?我的是查询语句诶...
------其他解决方案--------------------
procedure pro_service_statistics is
v_sql varchar2(1000);
v_obj varchar2(500);
v_num number;
v_date date;
--v_error varchar2(1000);
v_state number;
v_detail varchar(1000);
v_id number;
v_ename varchar2(500);
v_cname varchar2(1000);
v_flag number;
cursor cur_cursor is
select p.config_code, p.config_name from t_custom_table p;
cursor cur_Fcursor is
select t.service_id, t.english_name, t.chinese_name
from t_service_statistics t
where t.garther_date >= trunc(sysdate)
and t.flag = 0;
begin
--如果当天有没有成功的数据
if cur_Fcursor%notfound then --这里就报错了
for fitem in cur_Fcursor loop
pro_get_statistics(fitem.english_name, v_sql);
--做更新操作
v_id := fitem.service_id;
v_ename := fitem.english_name;
v_cname := fitem.chinese_name;
v_state := 1;
-- v_flag
end loop;
else
for titem in cur_cursor loop