2011-11-10 147 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