DBLINK名称作为变量oracle

时间:2018-11-24 03:29:48

标签: oracle oracle-apex dblink

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

现在,我想从dblinks中级联下面的LOV。因此,查询中作为dblink名称写的应该是变量。Query for LOV

谢谢。

2 个答案:

答案 0 :(得分:1)

假设您用于选择数据库的项目名为P1_DATABASE,其来源为

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

并返回

DBLINK1, 1
DBLINK2, 2
DBLINK3, 3

作为显示/返回值。

创建一个利用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;

表示:如果选择dblink1,则其返回值为1,因此第一个SELECT将返回一些值,而第二和第三则不会。您选择的其他选项也是如此。

这是一般想法;如有必要,对其进行修改。

答案 1 :(得分:0)

使用“返回SQL查询的PL / 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;

enter image description here