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;