JavaScript in der Oracle Datenbank (23ai)

03.
Februar
2025
Veröffentlicht von: Richard Meinhardt

Mit der Version 23ai ist unter anderem das Feature JavaScript in der Oracle Datenbank zu speichern und auszuführen hinzugekommen. Es wird direkt in der Datenbank gespeichert und ausgeführt. Das hat den Vorteil dass nun auch JavaScript-Entwickler in der Oracle Datenbank entwickeln können.

Allgemein

Um JavaScript-Code in der Datenbank zu speichern und auszuführen, muss zuerst ein MLE (Multilingual Engine) Module angelegt werden. Dafür sind entsprechende Rechte vorhanden: „EXECUTE ON JAVASCRIPT“ & „CREATE MLE“. Aufgrund der sprechenden Namen sind keine weiteren Erklärungen notwendig.
Folgend werden wir mit zwei kleinen Beispielen aufzeigen, wie man JavaScript in der Datenbank verwenden kann. Ein „klassisches“ HelloWorld und ein weiteres Beispiel, in dem auf eine Tabelle zugriffen wird.

Beispiel - "Hello World"

Grundsätzlich unterscheidet sich das Anlegen von JavaScript nicht großartig von PL/SQL. Natürlich ist dabei die Syntax eine andere. Bei JavaScript kommt jedoch ein zusätzlicher Schritt hinzu: So muss zuerst ein MLE Modul, dass den eigentlichen JavaScript-Code enthält, angelegt werden:

SQL> CREATE OR REPLACE MLE MODULE HelloWorld
  2  LANGUAGE JAVASCRIPT AS
  3  export function HalloWorld(p1_name) {
  4      return `Hi, ${p1_name}.`;
  5  }
  6  /

MLE module created.


Im nächsten Schritt erstellen wir eine PL/SQL-Funktion, die als Wrapper für das MLE Modul dient:

SQL> CREATE OR REPLACE FUNCTION HalloWorld(p1_name VARCHAR2)
  2  RETURN VARCHAR2
  3  AS MLE MODULE HelloWorld SIGNATURE 'HalloWorld(string)';
  4  /

Function created.


Mit der PL/SQL-Funktion ist es möglich diese sowohl in SQL wie auch PL/SQL aufzurufen.

SQL:

SQL> SELECT HalloWorld('Richi') FROM DUAL;

HALLOWORLD('RICHI')
--------------------------------------------------------------------------------
Hi, Richi.


PL/SQL:

SQL> SET SERVEROUTPUT ON
SQL> BEGIN
  2    DBMS_OUTPUT.PUT_LINE(HalloWorld('Richi'));
  3  END;
  4  /
Hi, Richi.

PL/SQL procedure successfully completed.


Beispiel - Datenbank

Gerade der Zugriff auf Tabellen ist ein wichtiger Aspekt, wenn man Code in der Datenbank speichert. Im Vergleich zu PL/SQL ist der Zugriff leider nicht so einfach. Da der Code direkt in der Datenbank läuft, kann man hier auf die meisten Verbindungsangaben (Host, Username, Passwort, Port) verzichten.
Der grundlegende Ablauf bleibt gleich aber der JavaScript-Code ändert sich:

SQL> CREATE OR REPLACE MLE MODULE getHiredate LANGUAGE JAVASCRIPT AS
  2  export function queryemp(empno) {
  3      const query = 'SELECT HIREDATE FROM emp WHERE EMPNO = :id';
  4      const result = session.execute(query, [empno], { outFormat: oracledb.OUT_FORMAT_OBJECT });
  5      console.log(result.rows[0].HIREDATE);
  6  }
  7  /
MLE module created.

SQL>


Erklärung:

  • In Zeile 3 wird die Query festgelegt
  • In Zeile 4 wird die Query über das immer vorhandene SESSION Objekt ausgeführt
  • In Zeile 5 wird das Ergebnis ausgeben

Der PL/SQL-Wrapper unterscheidet sich kaum vom ersten Beispiel:

SQL> CREATE OR REPLACE FUNCTION JSGetHiredate(id NUMBER)
  2  RETURN VARCHAR2
  3  AS MLE MODULE getHiredate SIGNATURE 'queryemp(number)';
  4  /
Function created.

SQL>


Somit ist auch der Aufruf sehr ähnlich zum ersten Beispiel.

SQL> SET SERVEROUTPUT ON;
SQL> BEGIN
SQL>   2      DBMS_OUTPUT.PUT_LINE(JSGetHiredate(7902));
  3  END;
  4  /
Thu Dec 03 1981 00:00:00 GMT+0100 (GMT+1)

PL/SQL procedure successfully completed.

SQL>

 

Fazit

Es wird sich erst mit der Zeit zeigen wie nützlich „JavaScript in der Datenbank“ wirklich ist. Die große Stärke von JavaScript betrifft alles, was mit Webstrukturen zu tun hat. Aber direkt in der Datenbank sind solche Strukturen eher selten. Man denkt wahrscheinlich gleich an  APEX, allerdings gibt es hier schon unzählige Wege JavaScript einzubinden.
Dass JavaScript in seiner Nische PL/SQL Konkurrenz macht bezweifle ich persönlich, es gibt einfach zu viele Komfort-Hürden.
Das wahrscheinliche Szenario: 
Entwicklung einer neuen Oracle Umgebung von einem Team mit JavaScript (und keinem oder wenig PL/SQL) Knowhow. Dort könnte es vermutlich zu einem verstärkten Einsatz von JavaScript in der Datenbank kommen.

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.