我想在 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/