2017-02-23 73 views
0

Я создаю процедуру для объединения двух таблиц в разных экземплярах базы данных. DB_FROM и DB_TO указаны в качестве параметров процедуры. Все остальное жестко запрограммировано.Oracle - выбор из удаленной базы данных, взятый из параметра PL/SQL

PROCEDURE MERGE_TABLE_1(DB_FROM, DB_TO) AS 
BEGIN 
    MERGE INTO [email protected]_TO DSTN 
     USING (SELECT * FROM [email protected]_FROM) SRC 
     ON (DSTN.ID = SRC.ID) 
     WHEN MATCHED THEN 
     WHEN NOT MATCHED THEN 
END MERGE_TABLE_1 

Я получаю ошибку ниже, когда я пытаюсь скомпилировать

Error(1): ORA-04052: error occurred when looking up remote object 
[email protected]_TO ORA-00604: error occurred at recursive SQL level 1 
ORA-02019: connection description for remote database not found 

ответ

4

Нет, он не будет работать таким образом. Вы не можете использовать переменные как имена таблиц, имена столбцов или имена ссылок db в статическом SQL. Вы можете достичь того, что хотите, используя dynamic sql:

EXECUTE IMMEDIATE 
'MERGE INTO [email protected]' || DB_TO || ' DSTN 
    USING (SELECT * FROM [email protected]' || DB_FROM || ') SRC 
    ON (DSTN.ID = SRC.ID) 
    WHEN MATCHED THEN 
    WHEN NOT MATCHED THEN ...'; 
+0

Большое спасибо, Марцин ... – Yahya