我们可以在oracle过程中使用%rowtype的数据类型作为out参数

时间:2016-12-26 10:36:58

标签: stored-procedures oracle11g

create or replace 
procedure find_emp_info (
    p_emp_info out emp%rowtype,
    p_empno in emp.empno%type default 7839
) 
is 
p_emp_info emp%rowtype;
begin 
    select *   into emp_info 
    from emp 
    where empno =p_empno;
exception 
when no_data_fount then 
    dbms_output.put_line( 'enter employee number not exists');
when others then 
    dbms_output.put_line('ERROR OCCURS ') ;
    RAISE_APPLICATION_ERROR (-20003,SQLCODE||CHR(10)||sqlerrm);
end find_emp_info  ;
/
  

PLS-00410:RECORD,TABLE或参数列表中的重复字段不是   允许

为什么在上面的代码中出现此错误

2 个答案:

答案 0 :(得分:1)

您已声明了一个名为p_emp_info的局部变量,但您的out参数名称相同。

你根本不需要那个本地变量;只是删除它的声明。

create or replace 
procedure find_emp_info (
    p_emp_info out emp%rowtype,
    p_empno in emp.empno%type default 7839
) 
is 
begin 
  select * into emp_info 
  from emp 
...

答案 1 :(得分:0)

有两个错误,因为@Alex提到你声明了一个本地变量p_emp_info,可以将其删除。

您使用的例外是no_data_fount,必须是no_data_found

create or replace 
procedure find_emp_info (
    p_emp_info out emp%rowtype,
    p_empno in emp.empno%type default 7839
) 
is 
begin 
    select *   into p_emp_info 
    from emp 
    where empno =p_empno;
exception 
when no_data_found then 
    dbms_output.put_line( 'enter employee number not exists');
when others then 
    dbms_output.put_line('ERROR OCCURS ') ;
    RAISE_APPLICATION_ERROR (-20003,SQLCODE||CHR(10)||sqlerrm);
end find_emp_info  ;
/