1

値を挿入する列を定義するパラメーターを持つオラクル関数があります。

 function something(p_value, p_nr) 
 is 
   ...
 begin
   if p_nr = 1 then
       insert into A (column1) (p_value);
   else if p_nr = 2 then
       insert into A (column2) (p_value);
   ...
   end if; 

テーブルに入力する値がいくつかあり、この値のみを動的に挿入する必要があります。これを行う簡単な方法はありますか?

4

2 に答える 2

3

テーブル構造が列のデフォルト値を定義している場合は、条件付き挿入も検討できます。

insert all
when :p_nr = 1 then into A( col1 ) values( p_value )
when :p_nr = 2 then into A( col2 ) values( p_value )
when :p_nr = 3 then into A( col3 ) values( p_value )
select :p_value as p_value from dual
;

利点は、このクエリがデフォルト値を尊重することです。例を見てください。

create table A(
  col1 varchar2( 10 ) default 'default 1',
  col2 varchar2( 10 ) default 'default 2',
  col3 varchar2( 10 ) default 'default 3'
);

variable p_nr number
variable p_value varchar2( 100 )

exec :p_nr:=2
exec :p_value:='value'

insert into A (col1, col2, col3)
values (case when :p_nr = 1 then :p_value end,
        case when :p_nr = 2 then :p_value end,
        case when :p_nr = 3 then :p_value end);

select * from A;

COL1       COL2       COL3     
---------- ---------- ----------
           value             

と:

rollback;

insert all
when :p_nr = 1 then into A( col1 ) values( p_value )
when :p_nr = 2 then into A( col2 ) values( p_value )
when :p_nr = 3 then into A( col3 ) values( p_value )
select :p_value as p_value from dual
;
select * from A;

COL1       COL2       COL3     
---------- ---------- ----------
default 1  value      default 3 
于 2013-07-25T20:48:26.423 に答える