当其他人没有捕获到 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>
我的 '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>