2011-11-10 14 views
3

私はストアドプロシージャを持っています。私はそれから関数を呼びたいと思います。検索されたカーソルレコードを関数に渡したい。どのように関数の引数として取得されたカーソルレコードを渡すことができますし、どのように私は関数内でそれにアクセスできますか?どのように関数を宣言しますか?カーソルレコードを関数に渡す

あなたが本当に(あなたが値を返すようにしたいことを意味する)機能ではなく、値を返さないプロシージャを(したいと仮定すると
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

としてPROCEDUREのservice__updateをCREATE OR REPLACE )とカーソルが本当に単一のテーブルからすべての列を選択していると仮定して、あなたはアンカー%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 - No. REF CURSORは、Oracleの読み取り専用構造です。もちろん、レコードからデータを読み取り、後続の 'UPDATE'ステートメントでそのデータを基になるテーブルに対して使用することもできます。 –

+0

情報ありがとうございました – Arav