其他人未发现ORA错误时出现异常



My的"当其他人出现异常时"块在尝试更新不存在的表时没有捕获错误。我是不是错过了什么?

BEGIN
UPDATE made_up_table
SET made_up_column = 1;
exception 
WHEN OTHERS THEN 
dbms_output.put_line('123');
end;

试图使用不存在的表,会得到编译时错误,而不是运行时错误。例如,在这里你没有例外处理:

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

如果创建具有非空约束的表

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>

最新更新