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ügtDies 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?
So einfach ist das! Danke vielmals! :) – silentsurfer
Gern geschehen. – abarisone