DBLINK 名称作为变量 oracle

DBLINK Name as a variable oracle

我在 oracle apex 中使用 dblink 时遇到问题。我已经创建了 3 个 Dblinks 到 3 个不同的远程数据库,DBLINKS

现在我想要从 dblinks 级联下面的 LOV。那么在查询中应该写什么,因为dblink的名称是一个变量。Query for LOV

谢谢。

假设您用于 select 一个 数据库 的项目被命名为 P1_DATABASE 并且它的来源是

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

和returns

DBLINK1, 1
DBLINK2, 2
DBLINK3, 3

作为 display/return 值。

创建一个利用UNION的LoV,例如

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;

这意味着:如果你 select dblink1,它的 return 值是 1 所以第一个 SELECT 将 return 一些值,而第二和第三不会。您选择的其他选项也是如此。

这是总体思路;必要时修改它。

使用 "PL/SQL Function Body returning SQL Query" 然后在 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;