###前提・実現したいこと
Database linkを使用して、更新先のDBを動的に制御する必要があります。
まずは送信元DBと更新先DBの差を取得し、差があれば更新先DBを更新します。
現行は1つのサーバから1つのサーバへデータ連携していたので、差分取得の際、カーソル宣言をして、暗黙カーソルオープンされてました。
改修するにあたり、1つのサーバから複数のサーバへデータ連携する必要が出てきました。
そこでDBLINKを使用するのですが、テーブルを動的にするとなると、OPENしてFETCHすることが避けられない(と思っています)ようで、現行の処理を大幅に変更する必要がありますが、それを避けたいです。
ご回答ありがとうございます。
ソースの参考を貼り付けます。
スマホからなので、抜粋ですが、宜しくお願い致します。
###現行ソース(抜粋)
PL/SQL
1CREATE OR REPLACE procedure 2XX.ABC( 3 DB_LINK_NM varchar2(384); 4) as 5 6--差分取得カーソル変数 7cursol A 8 is 9select a,b,c 10 from TBL_A 11minus 12select a,b,c 13 from TBL_B; 14 15--更新処理 16procedure UPDATE_MST( 17 rec in A%ROWTYPE; 18) as 19 update TBL_A 20 set A = REC.a, 21 B = REC.b 22 where C = REC.c 23end UPDATE_MST; 24 25begin 26 --差分取得してLOOP 27 for REC in A loop 28 --更新処理 29 UPDATE_MST(REC); 30 end loop; 31... 32 33
###改修案(抜粋)
PL/SQL
1CREATE OR REPLACE procedure 2YY.ABC( 3 DB_LINK_NM varchar2(384); 4) as 5 6--変数定義 7SQL varchar2(1000); 8TYPE cv_type IS REF CURSOL; 9cur_cv cv_type; 10 11--差分取得SQL作成処理 12procedure CERATE_GET_DIF_SQL 13as 14 WSSQL varchar2(1000); 15begin 16 WSSQL := ''; 17 WSSQL := WSSQL ∣∣ 'select a,b,c from TBL_A'; 18 WSSQL := WSSQL ∣∣ 'minus'; 19 WSSQL := WSSQL ∣∣ 'select a,b,c from TBL_B@'; 20 WSSQL := ∣∣ DB_LINK_NM ; --◆ここで更新先テーブルのDBリンク名を結合 21 22open cur_cv for WSSQL 23 loop fetch cur_cv into REC(定義済変数とする) 24 exit cur_cv%NOTFOUND; 25 --〜更新処理(更新先DBをDBリンク名で指定して更新)〜 26 end loop; 27close cur_cv; 28...

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/21 03:46 編集
2016/12/21 04:20
2016/12/21 05:08 編集
2016/12/21 17:43 編集