Я должен обработать РТЫ 01 400 ошибок (не может вставить ПУСТОЙ УКАЗАТЕЛЬ в ("СХЕМА". "TABLE_NAME". "COLUMN_NAME")) использование дескриптора исключения.
Oracle Предопределяет несколько Исключений как (ACCESS_INTO_NULL, ZERO_DIVIDE и так далее), но по-видимому не определяет Исключение для РТОВ 01 400 ошибок, как я обрабатываю этот конкретный код ошибки?
Мне нужно что-то вроде этого (другие предложения приняты).
....
...
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 - это special для Oracle. С ними действительно нельзя шутить. Когда вы хотите иметь набор предопределенных исключений, вы не можете объявить их "глобально", как стандартные исключения. Вместо этого создайте пакет exceptions, в котором есть все объявления исключений, и используйте его в вашем коде application.
Пример:
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;
/
Исключение можно обрабатывать следующим образом:
....
...
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;
вы можете определить свои собственные исключения, например, переменные (они будут иметь ту же область действия, что и другие переменные, так что вы можете определить исключения пакетов и т.д...):
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 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 сообщение об ошибке