DBLINK Имя как переменная оракул

У меня была проблема при использовании dblink в oracle apex. Я создал 3 Dblinks для 3 различных удаленных баз данных, DBLINKS

Теперь я хочу, чтобы нижеследующие LOV каскадировались из dblinks. Итак, что следует записывать в запросе, так как имя dblink является переменной. Запрос для LOV

Благодарю.

2 ответа

Решение

Предположим, что элемент, который вы используете для выбора базы данных, называется P1_DATABASE и его источник

select database_name d, database_id r
from list_of_databases
order by database_id;

и возвращается

DBLINK1, 1
DBLINK2, 2
DBLINK3, 3

в качестве отображения / возврата значений.

Создать LoV, который использует UNION, такие как

select role d, role r 
  from dba_roles@dblink1
  where :P1_DATABASE = 1
union all
select role d, role r 
  from dba_roles@dblink2
  where :P1_DATABASE = 2
union all
select role d, role r 
  from dba_roles@dblink3
  where :P1_DATABASE = 3;

что означает: если вы выберете dblink1, его возвращаемое значение 1 итак первый SELECT вернет некоторые значения, в то время как 2 и 3 не будут. То же самое касается других вариантов, которые вы выбираете.

Это общая идея; измените его при необходимости.

Используйте "Тело функции PL/SQL, возвращающее SQL-запрос", тогда в plsql вы можете создать конкретный запрос на основе входных данных.

В соответствии с этим>

declare
  v_sql varchar2(2000) := '';
begin
  if ( :P1_DATABASE = 1 ) then
    v_sql := 'select blah from blah@db1';
  elsif ( :P1_DATABASE = 2 ) then
    v_sql := 'select blah from blah@db2';
  elsif ( :P1_DATABASE = 3 ) then
    v_sql := 'select blah from blah@db3';
  end if;

  return v_sql;
end;

Другие вопросы по тегам