Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ORA-06502:PL/SQL:数字或值错误-oracle_Oracle_Function_Stored Procedures_Plsqldeveloper - Fatal编程技术网

ORA-06502:PL/SQL:数字或值错误-oracle

ORA-06502:PL/SQL:数字或值错误-oracle,oracle,function,stored-procedures,plsqldeveloper,Oracle,Function,Stored Procedures,Plsqldeveloper,我试图使用存储过程获取表上的依赖项。对于我的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"

我试图使用存储过程获取表上的依赖项。对于我的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;
        /

前两个值是存储过程的输入,其余的是输入输出参数

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

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

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

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

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

避免这种情况的最简单方法是使用
%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
...

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

避免这种情况的最简单方法是使用
%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
...

test
的全部内容与上述内容一起发布会很有帮助。还有完整的错误(可能在错误发生的地方有一个有用的行号)。我想,由于编译过程没有错误,您认为问题在于如何调用它。不是这样。该过程可能编译得很好,但是如果在运行时,在过程需要日期的地方给它一个数值,或者在它需要数字的地方给它一个字符串“abc”,它将抛出您看到的运行时错误。错误出现在sp的代码中,而不是您如何调用它。正如Peter所说,请共享您的sp代码-否则我们将无能为力。请不要在
SYS
模式(或任何其他内置模式)中创建任何内容。将
test
的全部内容与上述内容一起发布会有所帮助。还有完整的错误(可能在错误发生的地方有一个有用的行号)。我想,由于编译过程没有错误,您认为问题在于如何调用它。不是这样。该过程可能编译得很好,但是如果在运行时,在过程需要日期的地方给它一个数值,或者在它需要数字的地方给它一个字符串“abc”,它将抛出您看到的运行时错误。错误出现在sp的代码中,而不是您如何调用它。正如Peter所说,请共享您的sp代码-否则我们将无能为力。请不要在
SYS
模式(或任何其他内置模式)中创建任何内容。
r\u owner
在11gR2中是
varchar2(120)
(或我的11.2.0.4实例);不确定为什么,或者如何(或者是否)在其中获得大于30个字符的值。我想30就足够了……你说得对,我把长度改为100(为了安全起见)。成功了<代码>r_所有者是11gR2中的
varchar2(120)
(或我的11.2.0.4实例);不确定为什么,或者如何(或者是否)在其中获得大于30个字符的值。我想30就足够了……你说得对,我把长度改为100(为了安全起见)。成功了!!