簡體   English   中英

如何在SQL Developer中將替換變量設置為查詢結果?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM