2016-08-04 114 views
0

是否可以这样做,method_list和currency_list的值将来自表单。对于每种方法,每种方法都需要插入插入次数,如果存在3种货币,那么对于VISA方法,它必须插入一行3次,然后对于MASTER方法插入3次。存在每种方法的配置。将“变量”存储在列表中,然后将它们插入到数据库中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

你当然可以从阵列通过将table()他们周围的from子句中选择:

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; 

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

create type method_tab_t is table of method_obj_t; 

然后,你可以从那些使用table()选择

相关问题