在plsql中的过程中传递记录类型

时间:2017-05-20 10:54:53

标签: oracle plsql records

declare
  type rec_1 is record(
     e_nm varchar2(10),
     e_no number );
  r1 rec_1; 
  --select EMPNO, ename  into r1 from emp where empno = 7369;
  procedure proc_t1(r1 rec1) as
  begin
    select EMPNO, ename  
      into r1.e_no, r1.e_nm 
      from emp 
     where empno = 7369;
     dbms_output.put_line(r1.e_nm);
   end;

编写此代码后出现语法错误。任何人都可以告诉我为什么会出现这种语法错误吗?enter image description here

1 个答案:

答案 0 :(得分:0)

我无法告诉代码的意图,但也许你的意思是:

declare
    procedure proc_t1
    is
        type emp_rectype is record
            ( id   emp.empno%type
            , name emp.ename%type );

        l_emp emp_rectype;
    begin
        select empno, ename into l_emp.id, l_emp.name
        from   emp
        where  empno = 7369;

        dbms_output.put_line(l_emp.name);
    end;

begin
    proc_t1();
end;

注意:

  1. 除非您打算在其他地方重复使用记录类型,否则无法在程序之外声明记录类型,在此示例中您不会这样做。如果要重复使用它,请将其移到过程声明之上。

  2. 过程参数默认为IN模式,这是只读模式,因此在您的示例中,select into将失败。覆盖传入的参数没有意义,除非您想要对其进行转换并将其作为结果传回。