1

我想做 v$session@remotedatabase远程数据库是 dblink 地址的变量的地方。那可能吗?

我正在使用 Apex 4 并尝试在所有数据库上获取临时空间。

当前查询

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

yieldsORA-01729: database link name expected因为变量没有正确解析?

我对 SQL 很陌生,对不起

4

1 回答 1

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;
于 2012-06-01T16:20:06.050 回答