尝试通过循环从源表中选择通过 dblink 的游标来更新表时遇到了一些麻烦。
我有两个数据库 DB1、DB2。
它们是两个不同的数据库实例。我在 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”添加到 SOURCE table@DB2
插入数据的值错误。
正如我所料, TEST_COL_A 的值应该是“A”。
但是,它包含我在 SOURCE 表中添加的 NEW_COL 的值。
并且 TEST_COL_B 的值包含“A”。
有没有人遇到同样的问题?似乎 oracle 在编译时缓存了表列。有没有办法在不重新编译的情况下向源表添加列?