반응형
Oracle 예외 처리
ORA-01400 오류를 처리해야 합니다("SCHEMA"에 NULL을 삽입할 수 없습니다).TABLE_NAME"."COLUMN_NAME")을(를) 사용합니다.
ORACESS는 (ACCESS_INTO_NULL, ZERO_DIVIDE 등)과 같은 몇 가지 예외를 미리 정의하지만 ORA-01400 오류에 대한 예외를 정의하지는 않습니다. 이 특정 오류 코드를 처리하려면 어떻게 해야 합니까?
저는 이런 것이 필요합니다(다른 제안은 받아들여집니다).
....
...
INSERT INTO MY_TABLE (CODE, NAME) VALUES (aCode,aName);
COMMIT;
EXCEPTION
WHEN NULL_VALUES THEN /* i don't know this value , exist?*/
Do_MyStuff();
WHEN OTHERS THEN
raise_application_error(SQLCODE,MY_OWN_FORMAT_EXCEPTION(SQLCODE,SQLERRM),TRUE);
END;
미리 정의된 PL/SQL 예외는 Oracle에만 적용됩니다.당신은 정말로 그것들을 건드릴 수 없습니다.미리 정의된 일련의 예외를 사용하려는 경우 표준 예외처럼 "글로벌"으로 선언할 수 없습니다.대신 모든 예외 선언이 포함된 예외 패키지를 만들고 응용 프로그램 코드에 이를 사용합니다.
예:
CREATE OR REPLACE PACKAGE my_exceptions
AS
insert_null_into_notnull EXCEPTION;
PRAGMA EXCEPTION_INIT(insert_null_into_notnull, -1400);
update_null_to_notnull EXCEPTION;
PRAGMA EXCEPTION_INIT(update_null_to_notnull, -1407);
END my_exceptions;
/
이제 패키지에 정의된 예외 사용
CREATE OR REPLACE PROCEDURE use_an_exception AS
BEGIN
-- application specific code ...
NULL;
EXCEPTION
WHEN my_exceptions.insert_null_into_notnull THEN
-- application specific handling for ORA-01400: cannot insert NULL into (%s)
RAISE;
END;
/
출처: http://www.orafaq.com/wiki/Exception
변수와 같이 사용자 자신의 예외를 정의할 수 있습니다(다른 변수와 범위가 같으므로 패키지 예외 등을 정의할 수 있습니다).):
SQL> DECLARE
2 NULL_VALUES EXCEPTION;
3 PRAGMA EXCEPTION_INIT(NULL_VALUES, -1400);
4 BEGIN
5 INSERT INTO t VALUES (NULL);
6 EXCEPTION
7 WHEN null_values THEN
8 dbms_output.put_line('null value not authorized');
9 END;
10 /
null value not authorized
PL/SQL procedure successfully completed
다음과 같은 코드로 예외를 처리할 수 있습니다.
....
...
INSERT INTO MY_TABLE (CODE, NAME) VALUES (aCode,aName);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -1400 THEN
Do_MyStuff();
ELSE
raise_application_error(SQLCODE,MY_OWN_FORMAT_EXCEPTION(SQLCODE,SQLERRM),TRUE);
END IF;
END;
INSERT INTO MY_TABLE (CODE, NAME) VALUES (aCode,aName);
COMMIT;
EXCEPTION
WHEN NULL_VALUES /* i don't know this value , exist?*/
emesg := SQLERRM;
dbms_output.put_line(emesg);
WHEN OTHERS THEN
emesg := SQLERRM;
dbms_output.put_line(emesg);
END;
SQLERRM에 SQL 오류 메시지가 표시됩니다.
http://www.psoug.org/reference/exception_handling.html
언급URL : https://stackoverflow.com/questions/1975290/handle-oracle-exceptions
반응형
'codememo' 카테고리의 다른 글
| 오라클에서 문자열의 일부를 제거하는 방법 (0) | 2023.08.11 |
|---|---|
| 활동, 앱 호환 활동, 조각 활동 및 작업 표시줄 활동:어떤 것을 사용해야 합니까? (0) | 2023.08.11 |
| 비주얼 스튜디오 2015에서 ADO.net 아이덴티티 데이터 모델을 사용하여 엔티티 프레임워크 6(웹 API)으로 mariadb 설정(버전 10.2.17)을 수행하는 방법은 무엇입니까? (0) | 2023.08.11 |
| CSS에서 방사형 메뉴를 만드는 방법은 무엇입니까? (0) | 2023.08.06 |
| CSC 파일과 관련하여 C#에서 이 오류가 발생하는 이유는 무엇입니까? (0) | 2023.08.06 |