當嘗試通過循環遊標從源表通過dblink選擇來更新表時遇到了一些麻煩。select * throgh dblink問題
我有兩個數據庫DB1,DB2。
它們是兩個不同的數據庫實例。 我正在使用DB1此聲明如下:
CURSOR TestCursor IS
SELECT a.*, 'A' TEST_COL_A, 'B' TEST_COL_B
FROM [email protected] 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」到源表@ DB2
插入數據得到了錯誤的值。
正如我所料,TEST_COL_A的值應該是'A'。
但是,它包含了我在SOURCE表中添加的NEW_COL的值。
而且TEST_COL_B的值包含'A'。
有沒有人遇到同樣的問題? 看起來oracle在編譯時會緩存表列。 有沒有什麼辦法可以將列添加到源表中而無需重新編譯?
你沒有嘗試指定嚴格的列列表(a.COMPANY_NAME,a.CUST_ID)而不是。*? – heximal 2011-05-17 13:51:28
['REMOTE_DEPENDENCY_MODE'](http://psoug.org/reference/db_link.html)設置了什麼?它可以是'SIGNATURE'或'TIMESTAMP',每個都會引起不同的問題;-)另外使用'*'不是一件好事,請嘗試顯式的列名作爲@heximal所提到的。 – arnep 2011-05-17 14:12:22
@amep:'REMOTE_DEPENDENCY_MODE'只適用於遠程過程,不適用於表格。 – 2011-05-17 14:34:31