Я пытаюсь запустить набор запросов по DBLink, который определяется во время выполнения (из конфигурации или другого ввода). Я видел много примеров, предлагающих использовать динамический SQL и EXECUTE IMMEDIATE. Я хотел бы попытаться избежать этого любой ценой, так как мои запросы длинны и могут измениться, поэтому размещение их в строке упростит обслуживание.Динамический DBLink в Oracle
Я попытался имея мои запросы ссылки на синонимы, а затем просто обновить синоним до выполнения запроса:
EXECUTE IMMEDIATE 'CREATE OR REPLACE SYNONYM my_tbl_s FOR my_tbl_t' || p_dblink_name;
SELECT * FROM my_tbl_s;
Это работает, но я хочу использовать это в пакете, так что, когда я исполняю создать синоним пакета недействителен. Я также попытался отделяя свой код в различные пакеты и recompling после обновления синонимов:
EXECUTE IMMEDIATE 'ALTER PACKAGE my_pck COMPILE';
Однако первоначальный пакет вызова по-прежнему признан недействительный. Может ли кто-нибудь подумать о способе достижения динамических связей БД без использования динамического SQL?
На самом деле, я думаю, что одна и та же концепция будет работать с использованием VIEWS вместо SYNONYM. Я не верю, что обновление представления приведет к аннулированию ссылочного пакета. Нужно проверить ... – Paul