programing

다른 사람이 먼저 제기할 때의 예외가 무슨 효과가 있습니까?

css3 2023. 6. 24. 09:27

다른 사람이 먼저 제기할 때의 예외가 무슨 효과가 있습니까?

아직 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;

저는 포함된 예외 처리 코드가 전혀 작동하지 않고 단순히 제거될 수도 있다고 생각합니다. 문제가 발생하면 어차피 오류 메시지가 나타날 것이기 때문입니다.내 말이 맞니?

(이러한 코드는 이전 코드를 추가로 편집한 결과인 것 같습니다.)

예, 이 예외는 동일한 오류를 발생시킬 뿐만 아니라 오류의 실제 라인 번호를 마스킹하는 역할을 합니다.내가 당신이라면 그것을 제거할 것입니다.

예:

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

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

첫 번째 줄 번호는 실제 줄 번호 대신 상승을 가리킵니다.오류 추적을 더 어렵게 만들 수 있습니다.

그것은 단지 아무것도 하지 않을 뿐만 아니라 범죄에 가까워지고 있습니다.기본적으로 "재미삼아 실수가 실제 선이 아닌 이 선에서 발생한 것으로 가장하겠다"고 돼 있습니다.

예외 처리는 전체 언어에서 가장 잘못 이해된 측면입니다.위의 내용은 매우 일반적이며, '처리되지 않은 예외'가 나쁜 것이라는 기본적인 오해에서 비롯된 것이라고 생각합니다(질문을 제기할 정도입니다 - 왜 처리하지 않았습니까?).오라클만 '예외 발생' 또는 '예외 발생'이라는 용어를 사용했다면, 이 코드를 지원해야 하는 우리의 가난한 사람들은 '다른 사람들이 우리의 삶을 비참하게 만들 때' 예외 처리기가 훨씬 적었을 것입니다.

@DazzaL 점처럼 오차선만 마스크합니다.그러나 위의 코드는 치료해야 할 예외를 제기할 수 있지만 치료가 정의되지 않은 상태로 남아 있음을 알려주는 알림 역할을 합니다.

다른 프로그래밍 언어에서는 자동으로 시도/캐치 블록을 만들 수 있으며(예: 이클립스/자바, Netbeans/PHP 또는 Visual Studio/C#), 기본 동작이 예외를 다시 던지는 캐치("다른 경우"와 같은)로 생성되며, 프로그래머는 예외가 발생했을 때 수행할 작업을 결정합니다.

언급URL : https://stackoverflow.com/questions/14685467/does-exception-when-others-then-raise-do-something