变量数据库链接名称(Variable for Database Link Name)

2019-09-17 16:36发布

我想这样做v$session@remotedatabase其中remotedatabase是一个DBLINK地址的变量。 那可能吗?

我使用的Apex 4,并试图对所有数据库获得临时空间。

当前查询

select 'Total temp space available in :Database is '||sum(bytes)/1024/1024 ||' mb' from v$tempfile@:Database

yeilds ORA-01729: database link name expected ,因为变量是不是correcltly解决?

我是很新的SQL,对不起

Answer 1:

您将需要使用动态SQL才能有数据库链接是可变的。 在PL / SQL,这将是这个样子

DECLARE
  l_sql_stmt varchar2(1000);
  l_tmp_space varchar2(1000);
  l_database  varchar2(100) := <<db link name>>;
BEGIN
  l_sql_stmt := 'select ''Total temp space available in ' ||l_database  || ' is '' || sum(bytes)/1024/1024 ||'' mb'' from v$tempfile@' || l_database;
  dbms_output.put_line( l_sql_stmt );
  EXECUTE IMMEDIATE l_sql_stmt
    INTO l_tmp_space;
  dbms_output.put_line( l_tmp_space );
END;

基本上,你需要构建一个包含SQL语句的字符串,然后执行动态生成的字符串(这是比较复杂的SQL语句时本身是建立一个字符串作为你的是这里 - 这使得找出其中的单引号逃脱一个挑战位)。

根据你正在尝试在APEX的事,但是,你可能想要的东西有点不同。 例如,如果您要创建基于此报告,定期(非交互)的报告可以从任何一个SQL语句或返回SQL语句中的功能填充。 如果这是你想要做什么,你想要的东西一样

DECLARE
  l_sql_stmt varchar2(1000);
  l_tmp_space varchar2(1000);
  l_database  varchar2(100) := <<db link name>>;
BEGIN
  l_sql_stmt := 'select ''Total temp space available in ' ||l_database  || ' is '' || sum(bytes)/1024/1024 ||'' mb'' from v$tempfile@' || l_database;
  dbms_output.put_line( l_sql_stmt );
  RETURN l_sql_stmt;
END;


文章来源: Variable for Database Link Name