Oracle PLSQL-过程中的异常
在过程中使用异常 insert into语句的过程Oracle PLSQL-过程中的异常,oracle,plsql,exception-handling,Oracle,Plsql,Exception Handling,在过程中使用异常 insert into语句的过程 CREATE OR REPLACE PROCEDURE pSaveProductGroup (p_parentCode VARCHAR2, p_nameGroup VARCHAR2) IS v_var "ProductGroups"."code"%type; BEGIN select p."code" into v_var from "ProductGroups" p where p."code"=p_parentCode; if v_v
CREATE OR REPLACE PROCEDURE pSaveProductGroup (p_parentCode VARCHAR2, p_nameGroup VARCHAR2) IS
v_var "ProductGroups"."code"%type;
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);
end if;
EXCEPTION
WHEN v_var is null then
dbms_output.put_line('Undefined group.');
END;
它应该在需要时打印异常
Error: Error(18,12): PLS-00103: Encountered the symbol "IS" when expecting one of the following: . then or
您可以这样做来捕获异常
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;
您可以这样做来捕获异常
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;
当我调用此过程时:在begin pSaveProductGroup('G5','Group 13')上设置serveroutput;结束;它不打印异常。它打印01403。00000-“未找到数据”*原因:未从对象中找到数据*操作:由于提取结束,对象中没有数据。@user10966491我已更新了答案,请重新执行过程以查找错误详细信息。我怀疑您的select语句没有返回任何行。但我想在引发异常时打印“Undefined group”。如何做到这一点?@user10966491
如果(v_var为NULL)
应执行此语句以引发未定义的组异常。如果我错了,请纠正我。关键是过程中还有其他错误,阻止执行捕获未定义的组。首先,您需要找出哪个错误行有未找到数据@user10966491DBMS\u实用程序。format\u error\u stack
将提供有关错误的更多信息。当我调用此过程时:在begin pSaveProductGroup('G5','Group 13')上设置serveroutput;结束;它不打印异常。它打印01403。00000-“未找到数据”*原因:未从对象中找到数据*操作:由于提取结束,对象中没有数据。@user10966491我已更新了答案,请重新执行过程以查找错误详细信息。我怀疑您的select语句没有返回任何行。但我想在引发异常时打印“Undefined group”。如何做到这一点?@user10966491如果(v_var为NULL)
应执行此语句以引发未定义的组
异常。如果我错了,请纠正我。关键是过程中还有其他错误,阻止执行捕获未定义的组。首先,您需要找出哪个错误行没有找到数据。格式化错误堆栈将提供有关错误的更多信息。