oracle plsql存储过程错误处理ora-6502

时间:2017-07-24 18:27:01

标签: plsql

create procedure about_emp(p_empno in number,p_ename out varchar2)
is
begin
select ename into p_ename from emp
where empno=p_empno;
exception
when no_data_found then
dbms_output.put_line('your id not available');
when value_error then
dbms_output.put_line('enter exact data');
end;

执行

变量x varchar2(10); exec about_emp(4520,:x);

X

米歇尔

exec about_emp(1111,:x); 你不可用

exec abot_emp('a',:x); 第1行的错误: ORA-06502:PL / SQL:数字或值错误:字符到数字转换错误 ORA-06512:第1行

但通常在商店程序中显示如 第1行的错误: ORA-01403:未找到任何数据 ORA-06512:在“SCOTT.about_emp”,第4行 ORA-06512:第1行

请找出错误并给我解决方案

2 个答案:

答案 0 :(得分:0)

好吧,要么你声明X变量太小而不能保存empno.ename的值,所以要把它变大。如果您还想在sqlplus中查看dbms_output的输出,则需要启用:“set serveroutput on"

答案 1 :(得分:0)

过程about_emp期望number数据类型为第一个形式参数,varchar为第二个形式参数。

create procedure about_emp(p_empno in number,p_ename out varchar2)

但是在执行时你正在为第一个形式参数提供varchar数据类型(其中数字是预期的)

 exec abot_emp('a',:x); 

Oracle无法将a隐式转换为number,因此您收到错误ERROR at line 1: ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at line 1 您应该调用此过程,将第一个实际参数作为数字,将第二个参数作为varchar(或兼容(或可转换)数据类型)提供

根据exec about_emp(1111,:x); you id not available 这只是被困异常的输出

exception
when no_data_found then
dbms_output.put_line('your id not available');

这意味着SELECT返回空结果集,表中没有这样的数据。

UPDATE OP询问如何处理PL / SQL中的错误

第一个选项 - 您需要将错误与定义相关联

PRAGMA EXCEPTION_INIT(invalid_implicit_conversion, -6789);

然后在EXCEPTION部分中捕获错误。

 EXCEPTION
      WHEN invalid_implicit_conversion 
      THEN ...

第二个选项 -

  EXCEPTION
          WHEN OTHERS // this will trap any exception
          IF SQLCODE = -6789 THEN ...