PL / SQL - 为什么ORA-06550不能被困在异常中?

时间:2012-11-25 13:07:02

标签: sql oracle exception plsql

我创建了一个plsql程序来从替换变量中获取employee_id。每当我尝试输入一个字母时,我收到一条错误消息,其中ORA-06550为错误编号。我把它放在异常部分,但似乎没有被提出。

这是我在替换变量中输入'kk'时的错误消息...

Error report:
ORA-06550: line 13, column 9:
PLS-00201: identifier 'KK' must be declared
ORA-06550: line 13, column 1:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

这是我的pl / sql块

set serveroutput on
set verify off
declare
  cursor cur(mid employees.employee_id%type) is
  select e.last_name employee, 
         m.last_name manager 
    from employees e 
    join employees m 
      on m.employee_id = e.manager_id
   where m.employee_id=mid;

   rec cur%rowtype;
   m_id employees.employee_id%type;
   ex exception;
   pragma exception_init(ex, -06550);

begin
  m_id := &id;
  open cur(m_id);
  fetch cur into rec;
    dbms_output.put_line('here '||rec.employee || ' ' || rec.manager);
  close cur;

exception
  when ex then dbms_output.put_line('employee_id was not a valid number');
end;
/

有谁知道为什么我不能捕获该异常?

3 个答案:

答案 0 :(得分:4)

您无法在运行时捕获该异常,因为这是编译时错误。

  

m_id:=& id;

尝试输入'KK'而不是KK,否则会被解释为标识符。

答案 1 :(得分:1)

我希望我能发表评论。你不能将你的代码更改为:

m_id := '&id';

因此您不需要捕获该异常。

更新捕获号码例外:

declare
    (...)
begin
    m_id := to_number('&id');
    (...)
exception
    when VALUE_ERROR then
         dbms_output.put_line('You provided invalid number'); 
end;

答案 2 :(得分:1)

您的代码绝对正确。请使用员工ID而不是表中的KK。它必须是一个数字。例如101或102

在游标的where子句中,您使用“m.employee_id = mid”,employee_id的数据类型为数字。

感谢:)