Oracle 12c Datenbank - PL/SQL in SQL Statements verwenden

Ab 12c kann nun in einem SQL Statement direkt PL/SQL verwendet werden.

Ein ein erstes Beispiel:

WITH FUNCTION iconvert(p_id NUMBER) 
  RETURN NUMBER 
  IS 
  BEGIN 
    RETURN p_id*2; 
  END;
SELECT iconvert(2) FROM dual
/
 
ICONVERT(2)
-----------
         4

ORA-32034: unsupported use of WITH clause

Um aber das PL/SQL wiederum in einer geschachtelten SQL Abfrage zu verwenden muss der Hint WITH_PLSQL verwendet werden:

SELECT * FROM (
WITH FUNCTION iconvert(p_id NUMBER) 
  RETURN NUMBER 
  IS 
  BEGIN 
    RETURN p_id*2; 
  END;
SELECT iconvert(2) FROM dual
)
/
 
ERROR at line 2:
ORA-32034: unsupported USE OF WITH clause

Lösung: Hint WITH_PLSQL

SELECT /*+ WITH_PLSQL */ * FROM (
WITH FUNCTION iconvert(p_id NUMBER) 
  RETURN NUMBER 
  IS 
  BEGIN 
    RETURN p_id*2; 
  END;
SELECT iconvert(2) FROM dual
)
/
 ICONVERT(2)
------------
           4

Einsatz Möglichkeiten

Da das PL/SQL auch in einer View verwendet werden kann und „autonomous transaction“ unterstützt ist hier ein Log Trigger auf SQL Abfragen umsetzbar.

Quellen