无法在plsql中打印异常
Posted
技术标签:
【中文标题】无法在plsql中打印异常【英文标题】:Cannot print the exception in plsql 【发布时间】:2021-04-10 09:57:31 【问题描述】:代码正在为现有值运行。但是,如果我输入表格外的数字,exception
部分将无法正常工作。
【问题讨论】:
欢迎来到 Stack Overflow!请使用tour(您将获得徽章!),环顾四周,并阅读help center,尤其是How do I ask a good question?,我还推荐Jon Skeet 的Writing the Perfect Question 和Question Checklist。 idownvotedbecau.se/imageofcode 请将代码、错误消息、标记等发布为文本,而不是文本的图片。为什么:meta.***.com/q/285551/157247 另外,请不要使用全部大写。 ALL CAPS 读作大喊大叫。您可能不想对您要求帮助您的人大喊大叫。 :-) 对了,我建议写代码的时候使用indentation。 【参考方案1】:exception
部分的问题是它永远不会被执行。您的代码中没有select
语句会引发它。你会说光标中有 - 。是的,你是对的,但是 - 如果游标没有获取任何内容,它只会默默地退出循环,关闭游标并结束过程。
因此,您必须执行其他操作来确定您作为参数输入的部门是否存在。一个简单的选项是实际 count 提取的行数。然后,最后,检查它的(计数器的)值并显示适当的消息。
因为我没有你的桌子,所以我使用了 Scott 的示例emp
table
另外,我使用了一个游标 FOR
循环,它使用起来更简单,因为 Oracle 为您完成了大部分 dirty 工作(您不必声明游标变量,打开 /关闭光标,注意退出循环)
我的代码中没有任何处理;你会把你的“成绩”记录在那里
所以:
SQL> set serveroutput on;
SQL> declare
2 l_cnt number := 0; -- count number of rows fetched by cursor
3 begin
4 for cur_r in (select empno from emp
5 where deptno = &par_dept_code
6 )
7 loop
8 l_cnt := l_cnt + 1;
9 -- do some processing here
10 end loop;
11
12 if l_cnt = 0 then
13 dbms_output.put_line('There''s no such deptno - insert a valid value');
14 else
15 dbms_output.put_line('display result here');
16 end if;
17 end;
18 /
Enter value for par_dept_code: 20
display result here
PL/SQL procedure successfully completed.
SQL> /
Enter value for par_dept_code: 10
There's no such deptno - insert a valid value
PL/SQL procedure successfully completed.
SQL>
【讨论】:
以上是关于无法在plsql中打印异常的主要内容,如果未能解决你的问题,请参考以下文章