[英]How do you assign the result of an expression to an SQL substitution variable?
[英]How do I set a substitution variable to the result of a query in SQL Developer?
我想在Oracle SQL Developer(v17.2)中针对Oracle 12c数据库执行以下操作:
define thisenv = '(select name from v$database)'
select &thisenv env, count(1) from phone;
我希望选择返回如下内容:
ENV COUNT(1)
------ ----------
Dev1 7
如果使用示例代码,则会有效地告知我需要一个group by子句,因为它正在查看查询,而不是查询结果的字符串文字。 但是添加一个分组依据对我来说是行不通的。
根据对这个问题的回答,我尝试将第一行替换为
column dummyenv new_value thisenv
select name dummyenv from v$database;
我也尝试使用绑定变量来代替,但是仍然会提示我输入thisenv的值。 因此,这些选项不起作用。
我还应该尝试什么?
PHONE表如下所示:
PHONEID PERSONID PHONENUM TYPE
------- -------- ------------ ----
899250 ABC12345 123-456-7890 WORK
您可以在标量子查询中计算电话:
SELECT name,
(SELECT count(*) FROM phone) as phones
FROM v$database;
另外,由于通常不授予对视图v$database
的选择特权,因此可以使用sys_context
函数。 因为它是标量,所以可以将其放入查询中:
SELECT sys_context('userenv', 'db_name') as db_name, count(*)
FROM phone;
不用担心替换变量-您从以下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
),但是它应该对您PHONE
。 当我使用现有表名时,它确实对我有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.