Oracle

是否可以在 WITH 子句中同時包含子查詢和函式?

  • May 29, 2018

在 Oracle 12c 中,我們可以在 WITH 子句中包含子查詢

WITH dept_count AS (
 SELECT deptno, COUNT(*) AS dept_count
 FROM   emp
 GROUP BY deptno)
SELECT e.ename AS employee_name,
      dc.dept_count AS emp_dept_count
FROM   emp e
      JOIN dept_count dc ON e.deptno = dc.deptno;

我們還可以在 WITH 子句中包含函式

WITH
 FUNCTION with_function(p_id IN NUMBER) RETURN NUMBER IS
 BEGIN
   RETURN p_id;
 END;
SELECT with_function(id)
FROM   t1
WHERE  rownum = 1

是否可以在單個查詢的 WITH 子句中同時包含子查詢和函式?


這只是想到的一個假設性問題。我沒有任何現實世界的例子,但有興趣看看它是如何工作的。我沒有足夠的經驗來提出一個有用的例子。

這是一個例子:

with 
 function f1 return number is begin return 1; end;
 t1 as (select * from dual connect by level <= 3)
 select f1 from t1;
 /

       F1
----------
        1
        1
        1

作為初學者,了解以傳統方式格式化 SQL 會很有幫助。

這是@Balazs 的答案,只是間隔更多:

with 
 function f1 return number 
   is 
   begin 
   return 1; 
 end;

 t1 as 
 ( select 
       * 
   from 
       dual 
   connect by level <= 3)

select 
   f1 
from 
   t1;

引用自:https://dba.stackexchange.com/questions/208140