当其他人没有捕获到 ORA 错误时出现异常

Exception When Others Then Not Catching ORA Error

我的 'Exception when others then' 块在尝试更新不存在的 table 时没有捕获到错误。我错过了什么吗?

BEGIN

UPDATE made_up_table
SET made_up_column = 1;

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

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

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

如果您使用非空约束创建 table

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>