2016-07-06 6 views
1

Ich bin ein großer Fan der Subquery Factoring-Klausel.Orakel 12C mit Unterabfrage Factoring-Klausel mit Plsql-Deklaration

WITH t1 as (select 1 as id from dual) 
select * from t1; 

und Orakel 12c enthält nun einen PL/SQL-Vereinbarungsteil in dem WITH-Klausel

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 

aber ich kann sie nicht scheinen, um zusammen zu arbeiten, ist es möglich?

WITH t1 as (select 1 as id from dual) 
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; 

Antwort

3

Bitte beachten Sie die Syntax:
https://docs.oracle.com/database/121/SQLRF/statements_10002.htm#SQLRF01702

enter image description here

plsql_declarations
enter image description here

subquery_factoring_clause enter image description here

Wie Sie sehen, ist die Syntax:

WITH [ plsql_declarations ] [ subquery_factoring_clause ] 

Dies bedeutet, dass PL/SQL zuerst gehen müssen, dann eine Pause von SQL-Abfrage auf diese Weise:

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