sql - 如何在 SQL Developer 中为查询结果设置替换变量?

标签 sql oracle oracle-sqldeveloper

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

define thisenv = '(select name from v$database)'
select &thisenv env, count(1) from phone;

我希望 select 返回这样的内容:

ENV      COUNT(1)
------ ----------
Dev1            7

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

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

column dummyenv new_value thisenv
select name dummyenv from v$database;

我也尝试过使用绑定(bind)变量,但系统仍然提示我输入 thisenv 的值。因此,这些选项不起作用。

我还应该尝试什么?

PHONE 表如下所示:

PHONEID PERSONID PHONENUM     TYPE
------- -------- ------------ ----
899250  ABC12345 123-456-7890 WORK

最佳答案

不要介意替换变量 - 您从以下 SQL 语句开始,它在语法上是不正确的:

select ( select name from ... ), count(1) from ...

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

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

select name, ct
from   (select name from v$database)
       cross join
       (select count(1) as ct from phone);

现在您可以根据需要使用替换变量:

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),但它应该对你有用。当我使用现有表名时,它对我有用。

关于sql - 如何在 SQL Developer 中为查询结果设置替换变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50612945/

相关文章:

MySQL:如何添加指定的行

mysql - 在 MySQL WorkBench 中打开现有数据库

sql - 关联 varchar 值

sql - 在 PL/SQL block 中使用单引号和双引号 'single quote'

mysql - 如何将表的某些列移动到新表并将 ids 保存回原始表

mysql - 更新/插入具有自定义年份和月份的随机日期范围 - MYSQL

sql - 填补查询返回值的空白

sql-server - SQL Server 和 Oracle 的 JPA 实体兼容性(自动增量列问题)

oracle - SQL Developer 不显示 XML

sql - 在 Oracle SQL Developer 中使用引用游标