[英]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.