我想做v$session@remotedatabase,其中远程数据库是dblink地址的变量。这有可能吗?
我正在使用Apex 4,并试图在所有数据库上获得临时空间。
当前查询
select 'Total temp space available in :Database is '||sum(bytes)/1024/1024 ||' mb' from v$tempfile@:Databaseyeilds ORA-01729: database link name expected是因为变量没有正确解析?
我对SQL很陌生,对不起
发布于 2012-06-02 00:20:06
您需要使用动态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;https://stackoverflow.com/questions/10853586
复制相似问题