ORA-06502: PL/SQL: 数字或值错误 - oracle
ORA-06502: PL/SQL: numeric or value error- oracle
我正在尝试使用存储过程获取 table 上的依赖项。对于我的 sp,我将模式名称和 table 名称作为输入,并将与约束相关的变量作为输出。我还向 return 多行添加了一个游标。
我的 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 个值是输入,其余是存储过程的输入输出参数。
由于 constraint-、column- 和 table 等名称最长可达 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?
数据字典中的值大于您在匿名块中声明的变量。
避免这种情况的最简单方法是使用 %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
...
我正在尝试使用存储过程获取 table 上的依赖项。对于我的 sp,我将模式名称和 table 名称作为输入,并将与约束相关的变量作为输出。我还向 return 多行添加了一个游标。
我的 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 个值是输入,其余是存储过程的输入输出参数。
由于 constraint-、column- 和 table 等名称最长可达 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?
数据字典中的值大于您在匿名块中声明的变量。
避免这种情况的最简单方法是使用 %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
...