其他人未捕获ORA错误时发生异常

时间:2018-07-10 13:03:16

标签: sql oracle plsql exception-handling

当尝试更新不存在的表时,我的“其他人之后的异常”块未捕获错误。我想念什么吗?

BEGIN

UPDATE made_up_table
SET made_up_column = 1;

exception 
WHEN OTHERS THEN 
    dbms_output.put_line('123');
end;

1 个答案:

答案 0 :(得分:2)

尝试使用不存在的表,您会收到编译时错误,而不是运行时错误。 例如,在这里您没有异常处理:

SQL> BEGIN
  2
  3  UPDATE made_up_table
  4  SET made_up_column = null;
  5
  6  exception
  7  WHEN OTHERS THEN
  8      dbms_output.put_line('123');
  9  end;
 10  /
UPDATE made_up_table
       *
ERROR at line 3:
ORA-06550: line 3, column 8:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 3, column 1:
PL/SQL: SQL Statement ignored

如果您创建的表具有非null约束

SQL> create table made_up_table(made_up_column number not null);

Table created.

SQL> insert into made_up_table values (0);

1 row created.

,然后尝试进行违反约束的更新,引发异常,并显示错误消息:

SQL> BEGIN
  2
  3  UPDATE made_up_table
  4  SET made_up_column = null;
  5
  6  exception
  7  WHEN OTHERS THEN
  8      dbms_output.put_line('123');
  9  end;
 10  /
123

PL/SQL procedure successfully completed.

SQL>