Oracle错误ORA-06512

Til*_*Tin 4 oracle plsql stored-procedures ora-06512

只是想不通为什么它给了我ORA-06512错误

PROCEDURE PX(pNum INT,pIdM INT,pCv VARCHAR2,pSup FLOAT)
AS
    vSOME_EX EXCEPTION;

BEGIN 
    IF ((pNum < 12) OR (pNum > 14)) THEN     
        RAISE vSOME_EX;
    ELSE  
        EXECUTE IMMEDIATE  'INSERT INTO M'||pNum||'GR (CV, SUP, IDM'||pNum||') VALUES('||pCv||', '||pSup||', '||pIdM||')';
    END IF;
END PX;
Run Code Online (Sandbox Code Playgroud)

制作插入物的表格的结构基础:

CREATE TABLE "DB"."M12GR" (
    "IDM12GR" NUMBER(10,0) NOT NULL ENABLE, 
    "CV" VARCHAR(5) NOT NULL ENABLE, 
    "SUP" FLOAT(126) NOT NULL ENABLE, 
    "IDM12" NUMBER(10,0) NOT NULL ENABLE, 

    CONSTRAINT "PRIMARY_30" PRIMARY KEY ("IDM12GR"),
    CONSTRAINT "M12SUELORM12" FOREIGN KEY ("IDM12") REFERENCES "DB"."M12" ("IDM12") ENABLE
)
Run Code Online (Sandbox Code Playgroud)

APC*_*APC 29

ORA-06512是错误堆栈的一部分.它为我们提供了发生异常的行号,但没有给出异常的原因.这通常表示在堆栈的其余部分(您尚未发布).

你在评论中说

"仍然,当pNum不在12和14之间时会出现错误;当pNum介于12和14之间时,它不会失败"

好吧,你的代码执行此操作:

IF ((pNum < 12) OR (pNum > 14)) THEN     
    RAISE vSOME_EX;
Run Code Online (Sandbox Code Playgroud)

也就是说,当pNum不在12和14之间时,它会引发异常.那么错误堆栈的其余部分是否包含此行?

PROCEDURE PX(pNum INT,pIdM INT,pCv VARCHAR2,pSup FLOAT)
AS
    vSOME_EX EXCEPTION;

BEGIN 
    IF ((pNum < 12) OR (pNum > 14)) THEN     
        RAISE vSOME_EX;
    ELSE  
        EXECUTE IMMEDIATE  'INSERT INTO M'||pNum||'GR (CV, SUP, IDM'||pNum||') VALUES('||pCv||', '||pSup||', '||pIdM||')';
    END IF;
exception
    when vsome_ex then
         raise_application_error(-20000
                                 , 'This is not a valid table:  M'||pNum||'GR');

END PX;
Run Code Online (Sandbox Code Playgroud)

如果是这样,您需要做的就是添加一个异常块来处理错误.也许:

IF ((pNum < 12) OR (pNum > 14)) THEN     
    RAISE vSOME_EX;
Run Code Online (Sandbox Code Playgroud)

该文档包括深入处理PL/SQL异常. 了解更多.