ソーステーブルからdblinkを介して選択するカーソルをループしてテーブルを更新しようとすると、問題が発生します。
私は2つのデータベースDB1、DB2を持っています。
これらは2つの異なるデータベースインスタンスです。そして、私はDB1で次のステートメントを使用しています。
CURSOR TestCursor IS
SELECT a.*, 'A' TEST_COL_A, 'B' TEST_COL_B
FROM rpt.SOURCE@DB2 a;
BEGIN
For C1 in TestCursor loop
INSERT into RPT.TARGET
(
/*The company_name and cust_id are select from SOURCE table from DB2*/
COMPANY_NAME, CUST_ID, TEST_COL_A, TEST_COL_B
)
values
(
C1.COMPANY_NAME, C1.CUST_ID, C1.TEST_COL_A , C1.TEST_COL_B
) ;
End loop;
/*Some code...*/
End
列「NEW_COL」をSOURCEtable@ DB2に追加するまで、すべて正常に機能します。
挿入データの値が間違っていました。
TEST_COL_Aの値は、私が予想するように、「A」である必要があります。
ただし、SOURCEテーブルに追加したNEW_COLの値が含まれています。
また、TEST_COL_Bの値には「A」が含まれています。
誰かが同じ問題に遭遇しましたか?コンパイル時にOracleがテーブルの列をキャッシュしているようです。再コンパイルせずにソーステーブルに列を追加する方法はありますか?