Dynami c SQL.
Предположим, что ссылки базы данных хранятся в таблице link
:
SQL> select * From links;
LINK
---------
dbl_ora10
dbl_ora11
dbl_orcl
Затем вы должны использовать al oop, создать оператор insert
и выполните его. Поскольку у меня нет этих ссылок на базу данных, я просто показываю операторы на экране. Вы бы раскомментировали строку execute immediate
.
SQL> set serveroutput on
SQL> declare
2 l_str varchar2(200);
3 begin
4 for cur_r in (select link from links) loop
5 l_str := 'insert into db_tracker ' ||
6 'select name from v$database@' || cur_r.link;
7 dbms_output.put_line(l_str);
8
9 -- execute immediate l_str;
10 end loop;
11 end;
12 /
insert into db_tracker select name from v$database@dbl_ora10
insert into db_tracker select name from v$database@dbl_ora11
insert into db_tracker select name from v$database@dbl_orcl
PL/SQL procedure successfully completed.
SQL>
Если вы хотите на самом деле выбрать name
и отобразить его на экране, вам понадобится предложение into
. Примерно так:
SQL> set serveroutput on
SQL>
SQL> declare
2 l_name varchar2(30);
3 begin
4 for cur_r in (select link from links) loop
5 execute immediate 'select name from v$database@' || cur_r.link
6 into l_name;
7 dbms_output.put_line(l_name);
8 end loop;
9 end;
10 /
XE
PL/SQL procedure successfully completed.
SQL>