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;
我在 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;