首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle错误ORA-06512

Oracle错误ORA-06512
EN

Stack Overflow用户
提问于 2011-10-19 09:11:48
回答 3查看 272.2K关注 0票数 11

我就是搞不懂为什么它会给我ORA-06512错误

代码语言:javascript
复制
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;

在其中进行插入的表格的结构基址:

代码语言:javascript
复制
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
)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-19 11:44:58

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

在评论中你说

“尽管如此,当pNum不在12和14之间时,错误就会出现;当pNum在12和14之间时,它不会失败”

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

代码语言:javascript
复制
IF ((pNum < 12) OR (pNum > 14)) THEN     
    RAISE vSOME_EX;

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

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

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

代码语言:javascript
复制
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异常。

  • Find out more.
票数 37
EN

Stack Overflow用户

发布于 2011-10-19 09:50:41

变量pCv的类型是VARCHAR2,因此当您连接insert时,您不会将其放在单引号中:

代码语言:javascript
复制
 EXECUTE IMMEDIATE  'INSERT INTO M'||pNum||'GR (CV, SUP, IDM'||pNum||') VALUES('''||pCv||''', '||pSup||', '||pIdM||')';

此外,当您尝试在列中插入过大的值时,会引发错误ORA-06512。检查表M_pNum_GR的定义和您要发送的参数。为了清楚起见,如果您尝试在数字(2)字段中插入值100,则会引发错误。

票数 2
EN

Stack Overflow用户

发布于 2019-11-15 21:07:25

我也犯了同样的错误。在我的例子中,原因是我在一个表上创建了一个update触发器,并且在该触发器下,我再次更新同一个表。当我从触发器中删除update语句时,我的问题就解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7815527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档