首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库链接名称的变量

数据库链接名称的变量
EN

Stack Overflow用户
提问于 2012-06-01 23:54:44
回答 1查看 5.8K关注 0票数 1

我想做v$session@remotedatabase,其中远程数据库是dblink地址的变量。这有可能吗?

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

当前查询

代码语言:javascript
复制
select 'Total temp space available in :Database is '||sum(bytes)/1024/1024 ||' mb' from v$tempfile@:Database

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

我对SQL很陌生,对不起

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-02 00:20:06

您需要使用动态SQL才能使数据库链接可变。在PL/SQL中,它看起来像这样

代码语言:javascript
复制
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语句的函数填充常规(非交互式)报告。如果这就是你想要做的,你会想要这样的东西

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10853586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档