日期:2014-05-17  浏览次数:21119 次

oracle数据库存储过程
在存储过程中执行一个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