【问题标题】:Cannot print the exception in plsql无法在plsql中打印异常
【发布时间】:2021-04-10 09:57:31
【问题描述】:

代码正在为现有值运行。但是,如果我输入表格外的数字,exception 部分将无法正常工作。

【问题讨论】:

标签: oracle exception plsql


【解决方案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>

【讨论】:

    猜你喜欢
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2023-01-02
    • 2010-12-01
    • 2023-03-26
    相关资源
    最近更新 更多