다른 사람이 먼저 제기할 때의 예외가 무슨 효과가 있습니까?
아직 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
'programing' 카테고리의 다른 글
각 열 셀에 대한 열 셀 확장 (0) | 2023.06.24 |
---|---|
사용자 정의 함수가 재계산되지 않음 (0) | 2023.06.24 |
"error": "Index not defined, add.indexOn" (0) | 2023.06.24 |
권장되지 않음 경고: executable_path가 권장되지 않는 셀레늄 파이썬입니다. (0) | 2023.06.24 |
intellij 스프링 부트 대시보드 사용 안 함 (0) | 2023.06.24 |