Álv*_*lez 18 oracle plsql oracle10g
作为PL/SQL中的新手,我一直在复制并粘贴以下触发器:
CREATE OR REPLACE TRIGGER FOO_TRG1
BEFORE INSERT
ON FOO
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
IF :NEW.FOO_ID IS NULL THEN
SELECT FOO_SEQ1.NEXTVAL INTO :NEW.FOO_ID FROM DUAL;
END IF;
EXCEPTION
WHEN OTHERS THEN RAISE;
END FOO_TRG1;
/
ALTER TRIGGER FOO_TRG1 ENABLE;
Run Code Online (Sandbox Code Playgroud)
我怀疑所包含的异常处理代码什么都不做,可能只是被删除,因为如果出现问题,我会收到一条错误消息.我对吗?
(我猜这样的代码是进一步编辑先前代码的结果.)
Daz*_*zaL 30
是的,该异常除了引发相同的错误外什么也没做.它还用于掩盖错误的实际行号.如果我是你,我会删除它.
例如:
SQL> declare
2 v number;
3 begin
4 select 1 into v from dual;
5 select 'a' into v from dual;
6 exception
7 when others
8 then
9 raise;
10 end;
11 /
declare
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 9
Run Code Online (Sandbox Code Playgroud)
VS:
SQL> declare
2 v number;
3 begin
4 select 1 into v from dual;
5 select 'a' into v from dual;
6 end;
7 /
declare
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 5
Run Code Online (Sandbox Code Playgroud)
第一个中的行号指向加号而不是实际行号.它可以更难以追踪错误.