Oracle 错误 ORA-06512

标签 oracle stored-procedures plsql 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;

进行插入的表的结构基础:

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
)

最佳答案

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

您在评论中说过

"still, the error comes when pNum is not between 12 and 14; when pNum is between 12 and 14 it does not fail"

嗯,你的代码是这样做的:

IF ((pNum < 12) OR (pNum > 14)) THEN     
    RAISE vSOME_EX;

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

ORA-06510: PL/SQL: unhandled user-defined exception

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

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;

该文档详细介绍了如何处理 PL/SQL 异常。

关于Oracle 错误 ORA-06512,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7815527/

相关文章:

mysql - 从迁移创建存储过程

oracle - SQL*Plus 用户输入异常处理

oracle - 如何编译 ORACLE 触发器

java - 从Java插入数千条记录到Oracle,如何才能获得最佳性能?

MYSQL存储过程从日期创建动态表

Oracle PL/SQL 冒泡排序 - ORA-01403 : no data found ORA-06512: at line 12

oracle - Oracle 中的日期转换(YYYYMMDD 格式回 YYYYMMDD)

oracle - 通过 CLOB 参数将巨大的 XML 从 C#/.Net 传递到 Oracle 存储过程 - ORA-01008 : not all variables bound

java - 是否允许重新打包Oracles JDBC驱动程序?

sql-server - TSQL Xpath 修改 XML 字符串