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

oracle plsql存储过程错误处理ora-6502 执行,plsql,Plsql,变量x varchar2(10); 执行关于_emp(4520,:x) X 米歇尔 执行关于_emp(1111,:x); 你没有空 行政长官abot_emp('a',:x); 第1行错误: ORA-06502:PL/SQL:数字或值错误:字符到数字转换错误 ORA-06512:在第1行 但通常情况下,店内程序是显示式的 第1行错误: ORA-01403:未找到任何数据 ORA-06512:在“斯科特.关于emp”,第4行 ORA-06512:在第1行 请找出错误并给我解决方案,或者您声明的X变量

变量x varchar2(10); 执行关于_emp(4520,:x)

X 米歇尔

执行关于_emp(1111,:x); 你没有空

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

但通常情况下,店内程序是显示式的 第1行错误: ORA-01403:未找到任何数据 ORA-06512:在“斯科特.关于emp”,第4行 ORA-06512:在第1行


请找出错误并给我解决方案,或者您声明的X变量太小,无法容纳empno.ename的值,所以请将其变大。如果您还想在sqlplus中查看dbms_output的输出,则需要启用:“
set serveroutput on”
Procedure
about_emp
number
数据类型作为第一个形式参数,将
varchar
作为第二个形式参数

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;
但是,在执行时,您为第一个形式参数提供了
varchar
数据类型(其中需要数字)

Oracle无法将
a
隐式转换为
number
,因此第1行出现错误
error:ORA-06502:PL/SQL:数值或值错误:字符到数字转换错误ORA-06512:第1行
您应该调用此过程,将第一个实际参数作为number,第二个参数作为
varchar
(或兼容(或可转换)数据类型)

根据
exec关于_emp(1111,:x);您的id不可用
这只是捕获异常的输出

 exec abot_emp('a',:x); 
这意味着
SELECT
返回了空结果集,表中没有此类数据

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

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

exception
when no_data_found then
dbms_output.put_line('your id not available');
然后在
异常
部分捕获错误

PRAGMA EXCEPTION_INIT(invalid_implicit_conversion, -6789);
第二选项-

 EXCEPTION
      WHEN invalid_implicit_conversion 
      THEN ...

问问题时请温和:)但是先生如何处理我的过程中的ora-6502运行时错误,就像我处理的没有找到数据一样(ora-1403)。这是逻辑错误,不应该被捕获和处理,相反,你应该纠正你的逻辑,用正确的参数以正确的方式调用过程。我已经更新了我的答案,提供了关于如何处理PL/SQL中关于您上一个问题的错误的信息。但是,先生,为什么这两个错误显示不同的格式我不理解您的问题,请详细说明。当ora-1403出现时,程序在第1行给出错误:ora-01403:未找到数据ora-06512:在“SCOTT.about_emp”,第4行ORA-06512:在第1行,但当出现值-错误时,它在第1行显示不同的错误:ORA-06502:PL/SQL:数字或值错误:字符到数字转换错误ORA-06512:在第1行。
 EXCEPTION
      WHEN invalid_implicit_conversion 
      THEN ...
  EXCEPTION
          WHEN OTHERS // this will trap any exception
          IF SQLCODE = -6789 THEN ...