存储过程-无法显示找不到数据的消息

问题描述 投票:0回答:1

我创建了一个过程,该过程将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

plsql plsqldeveloper plsql-package
1个回答
0
投票

游标不能返回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>
© www.soinside.com 2019 - 2024. All rights reserved.