Вы можете сделать что-то подобное, чтобы поймать исключение.
CREATE OR REPLACE PROCEDURE pSaveProductGroup (p_parentCode VARCHAR2,
p_nameGroup VARCHAR2)
IS
v_var "ProductGroups"."code"%TYPE;
myex EXCEPTION;
PRAGMA EXCEPTION_INIT (myex, -20016);
BEGIN
SELECT p."code"
INTO v_var
FROM "ProductGroups" p
WHERE p."code" = p_parentCode;
IF v_var IS NOT NULL
THEN
INSERT INTO "ProductGroups" ("parentCode", "nameGroup")
VALUES (p_parentCode, p_nameGroup);
ELSE
IF (v_var IS NULL)
THEN
RAISE myex;
END IF;
END IF;
EXCEPTION
WHEN myex
THEN
DBMS_OUTPUT.put_line (
'ERROR_STACK: "Undefined group --> ' || DBMS_UTILITY.format_error_stack);
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.put_line (
'ERROR_STACK: NO_DATA_FOUND --> ' || DBMS_UTILITY.format_error_stack);
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (
'ERROR_STACK: OTHERS --> ' || DBMS_UTILITY.format_error_stack);
END;
Модифицированная версия процедуры
CREATE OR REPLACE PROCEDURE pSaveProductGroup (p_parentCode VARCHAR2,
p_nameGroup VARCHAR2)
IS
v_var "ProductGroups"."code"%TYPE;
myex EXCEPTION;
PRAGMA EXCEPTION_INIT (myex, -20016);
BEGIN
SELECT p."code"
INTO v_var
FROM "ProductGroups" p
WHERE p."code" = p_parentCode;
IF v_var IS NOT NULL
THEN
INSERT INTO "ProductGroups" ("parentCode", "nameGroup")
VALUES (p_parentCode, p_nameGroup);
ELSE
RAISE myex;
END IF;
EXCEPTION
WHEN myex
THEN
DBMS_OUTPUT.put_line (
'ERROR_STACK: Undefined group --> ' || DBMS_UTILITY.format_error_stack);
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.put_line (
'ERROR_STACK: NO_DATA_FOUND --> ' || DBMS_UTILITY.format_error_stack);
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (
'ERROR_STACK: OTHERS --> ' || DBMS_UTILITY.format_error_stack);
END;