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.
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.
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:
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>
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.
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.