2016-09-01 2 views
4
select banner 
from v$version 
; 


BANNER 
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production 
PL/SQL Release 12.1.0.2.0 - Production 
"CORE 12.1.0.2.0 Production" 
TNS for Solaris: Version 12.1.0.2.0 - Production 
NLSRTL Version 12.1.0.2.0 - Production 

Mit seiner 12c Release hat Oracle die Funktionalität zu ermöglichen, die Deklaration von PL/SQL-Funktionen direkt an der Spitze einer SQL-Anweisung (siehe https://oracle-base.com/articles/12c/with-clause-enhancements-12cr1)Oracle 12c: Mehrere Funktionen in einer WITH-Klausel der SELECT-Anweisung

hinzugefügt

Dies kann eine ziemlich praktische Funktion sein, insb. bei Projekten, bei denen Sie Daten aus DBs mit Benutzerrechten abrufen müssen, die auf SELECT-Anweisungen beschränkt sind.

Ein einfaches Beispiel:

with 
    function add_string(p_string in varchar2) return varchar2 
    is 
    --Function to add a string 
    l_buffer varchar2(32767); 
    begin 
    l_buffer := p_string || ' works!'; 
    -- 
    return l_buffer; 
    -- 
    end ; 
-- 
select add_string('Yes, it') as outVal 
from dual 
; 

--------- 
OUTVAL 
Yes, it works! 

Allerdings habe ich noch nicht gelungen, mehr Funktionen in dem WITH-Klausel enthalten:

with 
    function add_string(p_string in varchar2) return varchar2 
    is 
    --Function to add a string 
    l_buffer varchar2(32767); 
    begin 
    l_buffer := p_string || ' works!'; 
    -- 
    return l_buffer; 
    -- 
    end ; 
    --  
, function doesnt_it(p_string in varchar2) return varchar2 
    is 
    l_buffer varchar2(32767); 
    begin 
    l_buffer := p_string || ' Doesnt it?'; 
    -- 
    return l_buffer; 
    -- 
    end ; 
-- 
select add_string('Yes, it') as outVal 
from dual 
; 

Wirft ORA-00928: missing SELECT keyword. Weiß jemand, ob mehrere Funktionsdeklarationen mit dieser neuen Funktion erlaubt sind und wenn ja, wie sie erreicht werden können?

Antwort

3

Sie müssen das Komma vor der zweiten Funktion entfernen, damit es funktioniert. Ich habe mit TOAD, sqlDeveloper und sqlPlus getestet.

Wenn Sie schreiben die Anweisung wie folgt, beide Funktionen kombiniert:

with 
    function add_string(p_string in varchar2) return varchar2 
    is 
    --Function to add a string 
    l_buffer varchar2(32767); 
    begin 
    l_buffer := p_string || ' works!'; 
    -- 
    return l_buffer; 
    -- 
    end ; 
    --  
    function doesnt_it(p_string in varchar2) return varchar2 
    is 
    l_buffer varchar2(32767); 
    begin 
    l_buffer := p_string || ' Doesnt it?'; 
    -- 
    return l_buffer; 
    -- 
    end ; 
-- 
select doesnt_it(add_string('Yes, it')) as outVal 
from dual 
; 

Sie erhalten:

OUTVAL 
-------- 
Yes, it works! Doesnt it? 
+0

So einfach ist das! Danke vielmals! :) – silentsurfer

+0

Gern geschehen. – abarisone

Verwandte Themen