当"其他人提升"做某事时是否有例外?

Á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)

第一个中的行号指向加号而不是实际行号.它可以更难以追踪错误.