web-dev-qa-db-ja.com

DB2:カーソルからロード動的照会

Loadfromcursorを使用して複数のテーブルを移動する必要があります。ただし、ソーステーブルと宛先テーブルの数値列は同じではありません。

また、テーブルの構造は変更される可能性があるため、動的にするために同じものが必要です。

ステートメントは次のようになります。

 declare cur1 cursor for select col1,col2, col3  from test1;
 load from cur1 of cursor insert into test2 (col1,col2, col3);

クエリに列を追加できるように、executeimmediateを使用してプロシージャからこれを呼び出す必要があります。列のリストは変数V_COL_LISTにあるため、プロシージャに対して実行する必要のあるクエリは次のようになります。

 execute  immediate ('declare cur1 cursor for select '||V_COL_LIST ||'  from test1');
 execute  immediate ('load from cur1 of cursor insert into test2 ('||V_COL_LIST ||')');

ただし、上記のクエリでは、即時実行は機能しません。これに対する回避策はありますか?

1
rrrohanb

使用されたADMIN_CMDを理解しました

set v_sql ='LOAD FROM (SELECT '|| v_colquery || ' FROM ' || srctablename  || ') OF CURSOR INSERT INTO ' || destablename || '_LOG  ( ' || v_colquery || ')';
call admin_cmd(v_sql);   
0
rrrohanb