首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在SQL Developer中为查询结果设置替代变量?

如何在SQL Developer中为查询结果设置替代变量?
EN

Stack Overflow用户
提问于 2018-05-31 04:33:20
回答 2查看 1.6K关注 0票数 3

我想在Oracle的SQL Developer (v17.2)中针对Oracle 12c数据库执行类似的操作:

代码语言:javascript
复制
define thisenv = '(select name from v$database)'
select &thisenv env, count(1) from phone;

我希望select返回如下内容:

代码语言:javascript
复制
ENV      COUNT(1)
------ ----------
Dev1            7

如果我使用我的示例代码,我实际上被告知我需要一个group by子句,因为它看到的是查询,而不是作为查询结果的字符串文字。但是添加一个group by对我来说是行不通的。

根据this question的答案,我尝试将第一行替换为

代码语言:javascript
复制
column dummyenv new_value thisenv
select name dummyenv from v$database;

我也尝试使用绑定变量,但仍然提示输入thisenv的值。所以,这些选项不起作用。

我还应该尝试什么?

电话表如下所示:

代码语言:javascript
复制
PHONEID PERSONID PHONENUM     TYPE
------- -------- ------------ ----
899250  ABC12345 123-456-7890 WORK
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-31 04:38:29

您可以计算标量子查询中的电话数:

代码语言:javascript
复制
SELECT name, 
       (SELECT count(*) FROM phone) as phones
  FROM v$database;

或者,由于通常不授予对视图v$database的select特权,因此可以使用函数sys_context。因为它是一个标量,所以您可以将它放在查询中:

代码语言:javascript
复制
SELECT sys_context('userenv', 'db_name') as db_name, count(*)
  FROM phone;
票数 0
EN

Stack Overflow用户

发布于 2018-05-31 06:18:18

不用担心替代变量-您从以下SQL语句开始,这在语法上是不正确的:

代码语言:javascript
复制
select ( select name from ... ), count(1) from ...

这不会因为使用替代变量而失败,它会作为一个简单的SQL语句失败。

如果需要输出(如您所示),请将查询重写为

代码语言:javascript
复制
select name, ct
from   (select name from v$database)
       cross join
       (select count(1) as ct from phone);

如果需要,现在可以使用替代变量:

代码语言:javascript
复制
SQL> define thisenv = '(select name from v$database)'
SQL> select name, ct
  2  from   &thisenv
  3  cross join
  4  (select count(1) as ct from phone);

当然,当我在我的机器上运行这段代码时,我会得到一个错误(因为我没有表PHONE),但是它应该可以为您工作。当我使用现有的表名时,它确实适用于我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50612945

复制
相关文章

相似问题

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