【问题标题】:Procedure error ORA-06512程序错误 ORA-06512
【发布时间】:2018-10-09 23:34:34
【问题描述】:

您好,我有一个 oracle 数据库,我正在尝试添加一个过程以根据输入选择驱动程序 但是我收到此错误消息

ORA-06502 numeric or value error
ORA-06512: at line 9

create or replace
PROCEDURE "SELECTDRIVE" 
(LicenseNumber in number, FirstNamee out VARCHAR2, LastNamee out VARCHAR2, ContactNumberr out NUMBER)
as
begin

select d.firstname, d.lastname, d.contactnumber 
into   FirstNamee , LastNamee , ContactNumberr
from   Driver d
where d.license = LicenseNumber;
end;

这是它从中选择的表

LICENSE         NUMBER(10,0)
FIRSTNAME       VARCHAR2(15 BYTE)
LASTNAME        VARCHAR2(15 BYTE)
PHOTO           BLOB
CONTACTNUMBER   NUMBER(11,0)

有什么想法吗? 谢谢

【问题讨论】:

  • AFAIK,ORA-06512 的意思是“在线”——仅此而已。还有其他 ORA-* 消息吗?
  • ORA-06502 数值或数值错误

标签: sql oracle stored-procedures oracle11g


【解决方案1】:

确保输入参数LicenseNumber 的值不超过 (10,0) 的精度。据我了解,当您调用该过程而不是创建它时会出现错误。 在数据库端捕获传入参数的值。

【讨论】:

    【解决方案2】:

    第 9 行是哪一行?

    这段代码没有任何问题,至少在我尝试过时:

    SQL> create table driver (
      2    LICENSE         NUMBER(10,0),
      3    FIRSTNAME       VARCHAR2(15 BYTE),
      4    LASTNAME        VARCHAR2(15 BYTE),
      5    PHOTO           BLOB,
      6    CONTACTNUMBER   NUMBER(11,0));
    
    Table created.
    
    SQL> insert into driver (license, firstname, lastname, contactnumber)
      2    values (1, 'Little', 'Foot', 1234);
    
    1 row created.
    
    SQL> create or replace PROCEDURE SELECTDRIVE
      2    (LicenseNumber in number,
      3     FirstNamee out VARCHAR2,
      4     LastNamee out VARCHAR2,
      5     ContactNumberr out NUMBER)
      6  as
      7  begin
      8    select d.firstname, d.lastname, d.contactnumber
      9      into   FirstNamee , LastNamee , ContactNumberr
     10      from   Driver d
     11      where d.license = LicenseNumber;
     12  end;
     13  /
    
    Procedure created.
    
    SQL> declare
      2    l_fn driver.firstname%type;
      3    l_ln driver.lastname%type;
      4    l_cn driver.contactnumber%type;
      5  begin
      6    selectdrive(1, l_fn, l_ln, l_cn);
      7  end;
      8  /
    
    PL/SQL procedure successfully completed.
    
    SQL>
    

    请复制/粘贴您的 SQL*Plus 会话,以便我们查看发生了什么。

    【讨论】:

    • 它在我运行时显示 ORA-06502 数字或值错误
    • 来吧,认真点。我们应该用那个截图做什么?好像你不想被帮助一样。我告诉过你:复制/粘贴你的 SQL*Plus 会话,就像我做的那样 - 它清楚地显示了你做了什么以及 Oracle 如何响应你的操作。
    • 我从 c# 中把它当作整数。32 有问题吗?
    • 我不知道,抱歉。您可以做的测试是更改表列并删除 NUMBERs 比例和精度,即仅将这些列设置为 NUMBER。我认为名字和姓氏不超过 15 个字节;是吗?
    猜你喜欢
    • 2020-03-10
    • 2011-12-10
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多