将光标记录传递给函数

时间:2011-11-10 01:08:45

标签: oracle plsql oracle10g sqlplus

我有一个存储过程。我想从中调用一个函数。想要将检索到的光标记录传递给该函数。如何将检索到的光标记录作为函数参数传递,如何在函数内部访问它?我如何声明该功能?

  

创建或替换程序service__update as

cursor c_getData is
    select    *
    from  service_1
    where status=5    ;


begin
    dbms_output.enable(null);    

    for rec in c_getData loop

    function(rec)

1 个答案:

答案 0 :(得分:5)

假设你真的想要一个函数(这意味着你想要返回一个值)而不是一个过程(它没有返回一个值),并假设你的光标确实是从一个表中选择每一列,你可以声明一个采用锚定%ROWTYPE

的函数
SQL> create function get_empno( p_rec in emp%rowtype )
  2    return number
  3  is
  4  begin
  5    return p_rec.empno;
  6  end;
  7  /

Function created.

然后从您的程序中调用该函数

SQL> declare
  2    l_empno emp.empno%type;
  3  begin
  4    for i in (select * from emp)
  5    loop
  6      l_empno := get_empno( i );
  7      dbms_output.put_line( l_empno );
  8    end loop;
  9  end;
 10  /
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

PL/SQL procedure successfully completed.