2011-11-10 65 views
3

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

CREATE OR REPLACE PROCEDURE service__update作为

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


begin 
    dbms_output.enable(null);  

    for rec in c_getData loop 

    function(rec) 

回答

4

假设你真的想要一个功能(这意味着要返回的值),而不是一个程序(不返回值),并假设你的光标真的是从单个表中选择每一列,你可以声明一个函数,它的锚定%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. 
+0

非常感谢您的信息。我们使用oracle 10g。在Oracle中有一种修改游标记录的方法。在我之前发布的问题中,我使用rec变量来存储从光标检索到的记录。我将能够修改记录rec.service_active = sysdate的特定列,然后我可以将它提交给表吗? – Arav

+0

@Arav - 编号REF CURSOR是Oracle中的只读结构。当然,您可以从记录中读取数据,然后在随后的针对基础表的“UPDATE”语句中使用该数据。 –

+0

非常感谢您的信息 – Arav