#sql #oracle #plsql
Надо организовать динамическое подключение к любой из удаленных БД, данные о которых есть в таблице средствами PL/SQL кода. Можно ли имея таблицу с настроечными параметрами (имя, пароль, TNS), в зависимости от переданного в процедуру параметра (ключа этой таблицы), в коде менять подключение и использовать один и тот же запрос для выборки из одинаковых структур то одной, то другой удаленной БД?
Ответы
Ответ 1
TL;DR: Нельзя. Подключение к БД (connect) невозможно выполнить динамически: exec execute immediate 'connect user/pass@localhost/oradb'; --ORA-00900: invalid SQL statement так, как это недействительное SQL выражение. Для выполнения запросов или хранимых функций на удалённой БД используются линки (database links). Например, для задачи как в вопросе: create database link loopback1 connect to user identified by pass using 'localhost/pdb1'; create database link loopback2 connect to user identified by pass using 'localhost/pdb1'; create database link loopback3 connect to user identified by pass using 'localhost/pdb1'; set serveroutput on size unlimited declare function printRemoteData (dbLink varchar2) return varchar2 is dummy char (1); begin execute immediate 'select dummy from dual@'||dbLink into dummy; -- do something with remote data return 'remote connection using @'||dbLink; end; begin for r in ( select * from user_db_links where regexp_like (db_link, 'loopback\d', 'i')) loop dbms_output.put_line (printRemoteData (r.db_link)); end loop; end; / Вывод: remote connection using @LOOPBACK1 remote connection using @LOOPBACK3 remote connection using @LOOPBACK2 Пример решения более реальной задачи см. также по ссылке спроси Тома любезно предоставленной @MaxU.
Комментариев нет:
Отправить комментарий