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);
米歇尔
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行
请找出错误并给我解决方案
答案 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 ...