无法在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中打印异常的主要内容,如果未能解决你的问题,请参考以下文章

在error日志打印异常

在 Oracle PLSQL 上打印等效项

Plsql程序和异常

我想写两个plsql程序。在一个过程中获取数据并从第二个过程中打印出来

将 plsql 变量值从匿名块打印到 Java

1.PLSQL编写简单存储过程(无参,纯打印)