我创建了一个过程,该过程将Mgr编号作为执行的输入。当曾经有数据用于输入传递的经理编号时,我们就在获取数据。但是,当我们没有数据时,它不会显示“找不到数据”消息。
create or replace procedure sp1 (mg number)
as
cursor c1 is select * from emp1 where mgr = mg;
i emp1%rowtype;
begin
for i in c1
loop
dbms_output.put_line(i.ename||' '||i.sal);
end loop;
exception
when no_data_found then
dbms_output.put_line('no data found');
end;
/
有人可以告诉我,如果没有用于输入的经理编号的数据,如何显示“找不到数据”消息。
谢谢,Subash
游标不能返回no_data_found
,纯select
可以。
这里是一种解决方法:声明局部counter变量,然后查看其是否已更改。
SQL> create or replace procedure sp1 (mg number) as
2 cursor c1 is select * from emp where mgr = mg;
3 i emp%rowtype;
4 l_cnt number := 0; --> this
5 begin
6 for i in c1 loop
7 l_cnt := l_cnt + 1;
8 dbms_output.put_line(i.ename ||' '|| i.sal);
9 end loop;
10 if l_cnt = 0 then --> this
11 dbms_output.put_line('no data found');
12 end if;
13 end;
14 /
Procedure created.
测试:
SQL> exec sp1(7698);
ALLEN 1600
WARD 1250
MARTIN 1250
TURNER 1500
JAMES 950
PL/SQL procedure successfully completed.
SQL> exec sp1(76982);
no data found
PL/SQL procedure successfully completed.
SQL>