【问题标题】:ORA-06502: PL/SQL: numeric or value error- oracleORA-06502: PL/SQL: 数字或值错误 - oracle
【发布时间】:2016-12-18 06:51:32
【问题描述】:

我正在尝试使用存储过程获取对表的依赖关系。对于我的 sp,我将模式名称和表名称作为输入,将与约束相关的变量作为输出。我还添加了一个游标来返回多行。

我的 sp 运行良好,但是当我尝试执行存储过程时,它给出了错误提示:

     ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.TEST", line 23
ORA-06512: at line 10
06502. 00000 -  "PL/SQL: numeric or value error%s"

这是我尝试执行存储过程的方式: -- 试图执行存储过程

 Set  serveroutput on
        declare 
        V_constraintname varchar2(20);
        V_rowner  varchar2(20);
        V_rconstraintname  varchar2(20);
        V_columnname  varchar2(20);
        V_tabname  varchar2(20);
        V_refcsr SYS_REFCURSOR;
        begin
        dbms_output.enable;
        Test('ABC','XYZ',V_constraintname,V_rowner,V_rconstraintname,V_columnname,V_tabname,V_refcsr);

         dbms_output.put_line(V_constraintname) ;
         dbms_output.put_line(V_rowner) ;
         dbms_output.put_line(V_rconstraintname) ;
         dbms_output.put_line(V_columnname) ;
         dbms_output.put_line(V_tabname) ;
         --dbms_output.put_line(V_refcsr) ;
        end;
        /

前 2 个值是输入,其余是存储过程的 in out 参数。

【问题讨论】:

  • test的全部内容连同上述内容一起发布会很有帮助。还有完整的错误(可能有一个有用的发生错误的行号)。
  • 我想由于程序编译没有错误,您认为问题在于您如何调用它。不是这样。该过程可能编译得很好,但是如果在运行时你给它一个数值,它需要一个日期,或者你给它一个字符串'abc',它需要一个数字,它会抛出你看到的运行时错误。错误出现在 sp 的代码中,而不是你如何调用它。正如彼得所说,请分享您的 sp 代码 - 否则我们无能为力。
  • 请不要在SYS 架构(或任何其他内置架构)中创建任何内容。

标签: oracle function stored-procedures plsqldeveloper


【解决方案1】:

由于约束、列和表等名称最长可达 30 个字符,我建议您也为该长度声明变量。

 V_constraintname varchar2(30);
 V_rowner  varchar2(30);
 V_rconstraintname  varchar2(30);
 V_columnname  varchar2(30);
 V_tabname  varchar2(30);

What is the maximum length of a table name in Oracle?

【讨论】:

  • r_owner 在 11gR2 中是 varchar2(120)(或者我的 11.2.0.4 实例);不知道为什么,或者如何(或是否)你实际上可以获得超过 30 个字符的值。我希望 30 就足够了...
  • 你说得对,我把长度改成了 100(为了安全起见)。成功了!!
【解决方案2】:

数据字典中的值大于您在匿名块中声明的变量。

避免这种情况的最简单方法是使用%TYPE 语法,根据它们最终将接收其数据的列的数据类型来声明它们:

declare 
    V_constraintname   all_constraints.constraint_name%type;
    V_rowner           all_constraints.r_owner%type;
    V_rconstraintname  all_constraints.r_constraint_name%type;
    V_columnname       all_cons_columns.column_name%type;
    V_tabname          all_constraints.table_name%type;
    V_refcsr           SYS_REFCURSOR;
begin
...

【讨论】:

    猜你喜欢
    • 2014-12-30
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多