2016-08-04 6 views
0

このようにすることは可能ですか?method_listとcurrency_listの値はフォームから得られます。 3つのcurreciesがある場合は、通貨がある場合と同様に何回も各メソッドに対して挿入が発生する必要があります。次にVISAメソッドの場合、3回、3回MASTERメソッドを挿入する必要があります。各メソッドの設定が存在します。"変数"をリストに格納してデータベースに挿入する他のリストforeach他のリストcolumn_values

declare 
    method_list sys.odcivarchar2list; 
    currency_list sys.odcivarchar2list; 
begin 
    method_list := sys.odcivarchar2list( 
    (method:='VISA' , deposit:=1), 
    (method:='MASTER' , deposit:=0) 
); 
    currency_list := sys.odcivarchar2list('EUR','USD','GBP'); 
    INSERT INTO table (method, currency, deposit, confcode) 
    SELECT m.method, c.column_value, m.deposot, conf.code 
    FROM method_list m, currency_list c, conf 
    WHERE conf.method = m.method 
end; 

答えて

1

あなたは確かにfrom句でそれらの周りtable()を置くことによって配列から選択することができます。中にかかわらず、

1 declare 
    2 method_list sys.odcivarchar2list; 
    3 currency_list sys.odcivarchar2list; 
    4 begin 
    5 method_list := sys.odcivarchar2list(
    6  'VISA', 
    7  'MASTER' 
    8 ); 
    9 currency_list := sys.odcivarchar2list('EUR','USD','GBP'); 
10 for r in (
11 SELECT m.column_value m_value, c.column_value c_value 
12 FROM table(method_list) m, table(currency_list) c 
13 ) 
14 loop 
15  dbms_output.put_line (r.m_value || ' ' || r.c_value); 
16 end loop; 
17* end; 
SQL>/
VISA EUR 
VISA USD 
VISA GBP 
MASTER EUR 
MASTER USD 
MASTER GBP 

PL/SQL procedure successfully completed. 

しかし、あなたがmethod_listでやった擬似JSONの構文の並べ替えを(使用できません。 12c実際のJSON is supported in PL/SQL)。

しかし、のような独自のタイプを作成することができます。

declare 
    method_list method_tab_t; 
    currency_list sys.odcivarchar2list; 
begin 
    method_list := method_tab_t(
    method_obj_t('VISA',1), 
    method_obj_t('MASTER',0) 
); 
    currency_list := sys.odcivarchar2list('EUR','USD','GBP'); 
    for r in (
    SELECT m.method, m.deposit, c.column_value c_value 
    FROM table(method_list) m, table(currency_list) c 
) 
    loop 
    dbms_output.put_line (r.method || ' ' || r.deposit || ' ' || r.c_value); 
    end loop; 
end; 
:あなたは table()使用したものから選択することができその後

create type method_obj_t is object (method varchar2(10), deposit integer); 

create type method_tab_t is table of method_obj_t; 

関連する問題