我想这样做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,对不起
您将需要使用动态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;