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

Posted

技术标签:

【中文标题】oracle plsql 存储过程错误处理 oracle-6502【英文标题】:oracle plsql stored procedure error handling ora-6502 【发布时间】:2017-07-24 18:27:00 【问题描述】:
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); 执行 about_emp(4520,:x);

X

米歇尔

执行 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 行

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

【问题讨论】:

提问时请保持温和:) 【参考方案1】:

好吧,要么你声明的 X 变量太小而无法容纳 empno.ename 的值,所以让它变大。如果还想在sqlplus中看到dbms_output的输出,需要开启:"set serveroutput on"

【讨论】:

【参考方案2】:

过程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 ...

【讨论】:

但是先生。如何在我的程序中处理 ora -6502 运行时错误,例如我处理的 no_data_found(ora-1403)。 这是逻辑错误,不应该被捕获和处理,而是你应该纠正你的逻辑,以正确的方式调用过程,并使用正确的参数。我已经更新了我的答案,其中包含有关如何处理 PL/SQL 中关于您上一个问题的错误的信息。 但是先生为什么这两个错误显示不同的格式 我没看懂你的问题,请详细说明。 当 ora-1403 出现时,程序在第 1 行给出错误,如 ERROR:ORA-01403:未找到数据 ORA-06512:在“SCOTT.about_emp”,第 4 行 ORA-06512:在第 1 行但当 value -error 出现时,它在第 1 行显示不同的错误:ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at line 1。

以上是关于oracle plsql 存储过程错误处理 oracle-6502的主要内容,如果未能解决你的问题,请参考以下文章

myBatis 调用 Oracle 存储过程,报错,求解答

plsql报ora-00911错误的解决

PLsql登录oracle数据 报 “ora-12541:TNS:无监听程序”错误

oracle 11g 程序连接不上,PlSql通过配置选项后能连上

蟾蜍plsql错误执行存储过程

链接plsql错误ORA-01033:ORACLE initialization or shutdown in process