У меня возникли проблемы при попытке обновить таблицу с помощью циклического курсора, который выбирает из исходной таблицы через 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 @ DB2
Данные вставки получили неправильное значение.
Значение TEST_COL_A, как я и ожидал, должно быть 'A'.
Однако оно содержит значение NEW_COL, которое я добавляю в таблицу SOURCE.
И значениеиз TEST_COL_B содержит 'A'.
Кто-нибудь сталкивался с такой же проблемой?Похоже, оракул кэширует столбцы таблицы при компиляции.Есть ли способ добавить столбец в исходную таблицу без перекомпиляции?