2011-06-24 15 views
2

プロシージャ(b)で割り当てられたリストを取得し、OUT param型の変数' procedure of varchar2 'の変数に戻したいa)。 OUTパラメータタイプを定義するにはどうすればよいですか?Oracleプロシージャ 'out' 'テーブルのvarchar2型の型

EX。)

procedure_a() 
type t_list IS TABLE OF VARCHAR2(10) 

l_list t_list; 

procedure_b(l_list); 

end procedure_a; 

procedure_b(out_list OUT ????) 

OUT型は何でしょうか?

ありがとうございます。

答えて

5

型は、AとBの両方が参照可能などこかで宣言する必要があります。 1つのオプションは、パッケージ内の型を宣言することであろう、すなわち

SQL> create package some_pkg 
    2 as 
    3 type t_list is table of varchar2(10); 
    4 
    5 procedure procedureA; 
    6 procedure procedureB(p_list OUT t_list); 
    7 end; 
    8 
    9/

Package created. 

SQL> create or replace package body some_pkg 
    2 as 
    3 procedure procedureA 
    4 as 
    5  l_list t_list; 
    6 begin 
    7  procedureB(l_list); 
    8  dbms_output.put_line(l_list.count); 
    9 end; 
10 
11 procedure procedureB 
12  (p_list OUT t_list) 
13 as 
14 begin 
15  select ename 
16  bulk collect into p_list 
17  from emp; 
18 end; 
19 end; 
20/

Package body created. 

SQL> exec some_pkg.procedureA; 
16 

PL/SQL procedure successfully completed. 

別のオプションは、助言のためのすなわち

SQL> create type t_list 
    2  as table of varchar2(10); 
    3/

Type created. 

SQL> ed 
Wrote file afiedt.buf 

    1 create or replace procedure procedureB(p_list OUT t_list) 
    2 as 
    3 begin 
    4 select ename 
    5  bulk collect into p_list 
    6  from emp; 
    7* end; 
SQL>/

Procedure created. 

SQL> create or replace procedure procedureA 
    2 as 
    3 l_list t_list; 
    4 begin 
    5 procedureB(l_list); 
    6 dbms_output.put_line(l_list.count); 
    7 end; 
    8/

Procedure created. 

SQL> exec procedureA; 
16 

PL/SQL procedure successfully completed. 
+0

おかげで、SQLで型を宣言することです。 ちょうど最後の質問、私は正確なリスト(名前の静的なリストの例)を知っている、どのようなテーブルのタイプVARCHAR2対Vararrayを使用する利点はありますか? – help

+0

@help - コレクションに含まれる要素の数がわかっていて、その数が変わらない場合は、VARRAYではなくネストした表を使用する利点はありません。ただし、ネストした表のサイズは固定されていないため、今後静的リストが必然的に変更されると、ネストした表はより柔軟になります。 –

+0

Gotcha、ありがとう。 – help

関連する問題