What is JavaScript? Embedding JavaScript with HTML JavaScript conventions Variables in JavaScript
JavaScript straight from the Oracle Database
-
Upload
dimitri-gielis -
Category
Technology
-
view
201 -
download
0
Transcript of JavaScript straight from the Oracle Database
![Page 1: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/1.jpg)
Dimitri Gielis
OMG! JavaScript Straight from the Oracle Database
www.apexRnD.bedgielis.blogspot.com@[email protected]
![Page 2: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/2.jpg)
Dimitri Gielis❖ Founder & CEO of APEX R&D❖ 19+ years of Oracle
Experience (OCP & APEX Certified)
❖ Oracle ACE Director❖ “APEX Developer of the year
2009” by Oracle Magazine❖ “Oracle Developer Choice
award (ORDS)” in 2015❖ Author Expert Oracle APEX❖ Presenter at Conferences
![Page 3: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/3.jpg)
www.apexofficeprint.comwww.apexRnD.be
![Page 4: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/4.jpg)
http://dgielis.blogspot.com @dgielis
![Page 5: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/5.jpg)
Why?Why JavaScript in the DB?
![Page 6: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/6.jpg)
![Page 7: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/7.jpg)
![Page 8: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/8.jpg)
Occupational TherapyDemo
![Page 9: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/9.jpg)
…
…
![Page 10: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/10.jpg)
Benefits Running JavaScript in Oracle DB
❖ Achieving new database capabilities
❖ In-place and faster processing of JSON documents
❖ Reusing existing skills and code
![Page 11: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/11.jpg)
http://sogrady-media.redmonk.com/sogrady/files/2017/03/lang.rank_.117.wm_.png
![Page 12: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/12.jpg)
https://insights.stackoverflow.com/survey/2017#technology
![Page 13: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/13.jpg)
![Page 14: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/14.jpg)
Nashorn JavaScript Engine
![Page 15: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/15.jpg)
![Page 16: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/16.jpg)
with Nashorn
![Page 17: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/17.jpg)
A simple way to get started with Oracle Nashorn is to run JavaScript programs from the command line.
http://www.oracle.com/technetwork/articles/java/jf14-nashorn-2126515.html
![Page 18: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/18.jpg)
![Page 19: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/19.jpg)
var hello = function() { print("Hello Nashorn!");};
hello();
![Page 20: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/20.jpg)
jjs hello.js
![Page 21: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/21.jpg)
Demo
![Page 22: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/22.jpg)
Nashorn in the Oracle Database
![Page 23: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/23.jpg)
Step 1Get the necessary privilege
![Page 24: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/24.jpg)
grant DBJAVASCRIPT to hr;
![Page 25: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/25.jpg)
Step 2Create your JavaScript function
![Page 26: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/26.jpg)
function hello(){ var h = "Hello Nashorn!"; return h;}
var output = hello();print(output);
![Page 27: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/27.jpg)
Step 3Upload your JS file to the Database
![Page 28: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/28.jpg)
loadjava -v -u hr hello.js
![Page 29: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/29.jpg)
Step 4Check JavaScript is in Database
![Page 30: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/30.jpg)
select object_name, object_type from user_objects where object_type = 'JAVA RESOURCE'
![Page 31: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/31.jpg)
Step 5Execute!
![Page 32: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/32.jpg)
begin dbms_javascript.run('hello.js'); end; /
![Page 33: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/33.jpg)
Demo
![Page 34: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/34.jpg)
Table Data
![Page 35: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/35.jpg)
Table
![Page 36: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/36.jpg)
JavaScript in DB way
Step 1: Privilege (done)Step 2: Create JavaScriptStep 3: Load into DBStep 4: Execute
![Page 37: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/37.jpg)
var selectQuery = function(pId) { var Driver = Packages.oracle.jdbc.OracleDriver; var oracleDriver = new Driver(); var url = "jdbc:default:connection:"; var connection = oracleDriver.defaultConnection();
// Prepare statement var query = "SELECT e.employee_id, e.first_name, e.last_name FROM employees e WHERE e.employee_id = ?”; var preparedStatement = connection.prepareStatement(query); preparedStatement.setString(1, pId); // execute Query var resultSet = preparedStatement.executeQuery();
// display results while (resultSet.next()) { var output = resultSet.getString("FIRST_NAME"); } // cleanup resultSet.close(); preparedStatement.close(); connection.close(); return output;
![Page 38: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/38.jpg)
var selectQuery = function(pId) { var Driver = Packages.oracle.jdbc.OracleDriver; var oracleDriver = new Driver(); var url = "jdbc:default:connection:"; var connection = oracleDriver.defaultConnection();
// Prepare statement var query = "SELECT e.employee_id, e.first_name, e.last_name FROM employees e WHERE e.employee_id = ?”; var preparedStatement = connection.prepareStatement(query); preparedStatement.setString(1, pId); // execute Query var resultSet = preparedStatement.executeQuery();
// display results while (resultSet.next()) { var output = resultSet.getString("FIRST_NAME"); } // cleanup resultSet.close(); preparedStatement.close(); connection.close(); return output;
Setup DB connection
![Page 39: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/39.jpg)
var selectQuery = function(pId) { var Driver = Packages.oracle.jdbc.OracleDriver; var oracleDriver = new Driver(); var url = "jdbc:default:connection:"; var connection = oracleDriver.defaultConnection();
// Prepare statement var query = "SELECT e.employee_id, e.first_name, e.last_name FROM employees e WHERE e.employee_id = ?”; var preparedStatement = connection.prepareStatement(query); preparedStatement.setString(1, pId); // execute Query var resultSet = preparedStatement.executeQuery();
// display results while (resultSet.next()) { var output = resultSet.getString("FIRST_NAME"); } // cleanup resultSet.close(); preparedStatement.close(); connection.close(); return output;
SQL Statement
![Page 40: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/40.jpg)
var selectQuery = function(pId) { var Driver = Packages.oracle.jdbc.OracleDriver; var oracleDriver = new Driver(); var url = "jdbc:default:connection:"; var connection = oracleDriver.defaultConnection();
// Prepare statement var query = "SELECT e.employee_id, e.first_name, e.last_name FROM employees e WHERE e.employee_id = ?”; var preparedStatement = connection.prepareStatement(query); preparedStatement.setString(1, pId); // execute Query var resultSet = preparedStatement.executeQuery();
// display results while (resultSet.next()) { var output = resultSet.getString("FIRST_NAME"); } // cleanup resultSet.close(); preparedStatement.close(); connection.close(); return output;
Execute
![Page 41: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/41.jpg)
var selectQuery = function(pId) { var Driver = Packages.oracle.jdbc.OracleDriver; var oracleDriver = new Driver(); var url = "jdbc:default:connection:"; var connection = oracleDriver.defaultConnection();
// Prepare statement var query = "SELECT e.employee_id, e.first_name, e.last_name FROM employees e WHERE e.employee_id = ?”; var preparedStatement = connection.prepareStatement(query); preparedStatement.setString(1, pId); // execute Query var resultSet = preparedStatement.executeQuery();
// display results while (resultSet.next()) { var output = resultSet.getString("FIRST_NAME"); } // cleanup resultSet.close(); preparedStatement.close(); connection.close(); return output;
Display Results
![Page 42: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/42.jpg)
var selectQuery = function(pId) { var Driver = Packages.oracle.jdbc.OracleDriver; var oracleDriver = new Driver(); var url = "jdbc:default:connection:"; var connection = oracleDriver.defaultConnection();
// Prepare statement var query = "SELECT e.employee_id, e.first_name, e.last_name FROM employees e WHERE e.employee_id = ?”; var preparedStatement = connection.prepareStatement(query); preparedStatement.setString(1, pId); // execute Query var resultSet = preparedStatement.executeQuery();
// display results while (resultSet.next()) { var output = resultSet.getString("FIRST_NAME"); } // cleanup resultSet.close(); preparedStatement.close(); connection.close(); return output;
Cleanup and Return
![Page 43: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/43.jpg)
loadjava -v -u hr query.js
![Page 44: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/44.jpg)
create or replace and compile java source named "InvokeScript" asimport javax.script.*;import java.net.*;import java.io.*;
public class InvokeScript { public static String eval(String inputId) throws Exception { String output = new String(); try { // create a script engine manager ScriptEngineManager factory = new ScriptEngineManager();
// create a JavaScript engine ScriptEngine engine = factory.getEngineByName("javascript");
//read the script as a java resource engine.eval(new InputStreamReader(InvokeScript.class.getResourceAsStream("query.js")));
Invocable invocable = (Invocable) engine; Object selectResult = invocable.invokeFunction("selectQuery", inputId); output = selectResult.toString(); } catch(Exception e) { output =e.getMessage(); } return output; }}/
![Page 45: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/45.jpg)
create or replace and compile java source named "InvokeScript" asimport javax.script.*;import java.net.*;import java.io.*;
public class InvokeScript { public static String eval(String inputId) throws Exception { String output = new String(); try { // create a script engine manager ScriptEngineManager factory = new ScriptEngineManager();
// create a JavaScript engine ScriptEngine engine = factory.getEngineByName("javascript");
//read the script as a java resource engine.eval(new InputStreamReader(InvokeScript.class.getResourceAsStream("query.js")));
Invocable invocable = (Invocable) engine; Object selectResult = invocable.invokeFunction("selectQuery", inputId); output = selectResult.toString(); } catch(Exception e) { output =e.getMessage(); } return output; }}/
Enable JavaScript engine
![Page 46: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/46.jpg)
create or replace and compile java source named "InvokeScript" asimport javax.script.*;import java.net.*;import java.io.*;
public class InvokeScript { public static String eval(String inputId) throws Exception { String output = new String(); try { // create a script engine manager ScriptEngineManager factory = new ScriptEngineManager();
// create a JavaScript engine ScriptEngine engine = factory.getEngineByName("javascript");
//read the script as a java resource engine.eval(new InputStreamReader(InvokeScript.class.getResourceAsStream("query.js")));
Invocable invocable = (Invocable) engine; Object selectResult = invocable.invokeFunction("selectQuery", inputId); output = selectResult.toString(); } catch(Exception e) { output =e.getMessage(); } return output; }}/
Tell which file
![Page 47: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/47.jpg)
create or replace and compile java source named "InvokeScript" asimport javax.script.*;import java.net.*;import java.io.*;
public class InvokeScript { public static String eval(String inputId) throws Exception { String output = new String(); try { // create a script engine manager ScriptEngineManager factory = new ScriptEngineManager();
// create a JavaScript engine ScriptEngine engine = factory.getEngineByName("javascript");
//read the script as a java resource engine.eval(new InputStreamReader(InvokeScript.class.getResourceAsStream("query.js")));
Invocable invocable = (Invocable) engine; Object selectResult = invocable.invokeFunction("selectQuery", inputId); output = selectResult.toString(); } catch(Exception e) { output =e.getMessage(); } return output; }}/
Call function with param
![Page 48: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/48.jpg)
CREATE OR REPLACE FUNCTION invokeScriptEval(inputId varchar2) return varchar2 as language java name 'InvokeScript.eval(java.lang.String) return java.lang.String';/
![Page 49: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/49.jpg)
SELECT invokeScriptEval(100) FROM dual;
![Page 50: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/50.jpg)
Demo
![Page 51: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/51.jpg)
Query JSON data
![Page 52: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/52.jpg)
Table
CREATE TABLE js_rest ( id NUMBER NOT NULL, json_clob CLOB, CONSTRAINT js_rest_pk PRIMARY KEY (id), CONSTRAINT js_rest_json_chk CHECK (json_clob IS JSON) );
![Page 53: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/53.jpg)
Data
INSERT INTO js_rest (id, json_clob) VALUES (1, '{ "id" : "1", "firstname" : "Dimitri", "lastname" : "Gielils", "company" : "APEX RnD", "email" : "[email protected]", "picture: : null, "address" : { "City" : "Leuven", "Country" : "Belgium" } }');
![Page 54: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/54.jpg)
Normal Database way
SELECT a.json_clob.id FROM js_rest a;
![Page 55: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/55.jpg)
Works? (>32k)
SELECT a.json_clob.picture FROM js_rest a;
![Page 56: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/56.jpg)
JavaScript in DB way
Step 1: Privilege (done)Step 2: Create JavaScriptStep 3: Load into DBStep 4: Execute
![Page 57: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/57.jpg)
var selectQuery = function(pId) { var Driver = Packages.oracle.jdbc.OracleDriver; var oracleDriver = new Driver(); var url = "jdbc:default:connection:"; var connection = oracleDriver.defaultConnection();
// Prepare statement var query = "SELECT a.json_clob FROM js_rest a WHERE a.id = ?”; var preparedStatement = connection.prepareStatement(query); preparedStatement.setString(1, pId); // execute Query var resultSet = preparedStatement.executeQuery();
// display results while (resultSet.next()) { var output = resultSet.getString(1); } // cleanup resultSet.close(); preparedStatement.close(); connection.close(); return output;}
![Page 58: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/58.jpg)
var selectQuery = function(pId) { var Driver = Packages.oracle.jdbc.OracleDriver; var oracleDriver = new Driver(); var url = "jdbc:default:connection:"; var connection = oracleDriver.defaultConnection();
// Prepare statement var query = "SELECT a.json_clob FROM js_rest a WHERE a.json_clob.id = ?”; var preparedStatement = connection.prepareStatement(query); preparedStatement.setString(1, pId); // execute Query var resultSet = preparedStatement.executeQuery();
// display results while (resultSet.next()) { var output = resultSet.getString(1); } // cleanup resultSet.close(); preparedStatement.close(); connection.close(); return output;}
![Page 59: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/59.jpg)
var selectQuery = function(pId) { // setup connection …
// Prepare statement var query = "SELECT a.json_clob FROM js_rest a WHERE a.id = ?”; var preparedStatement = connection.prepareStatement(query); preparedStatement.setString(1, pId); // execute Query var resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { var jsonClob = resultSet.getString(1); }
/* parse JSON */ var obj = JSON.parse(jsonClob); output = obj.picture;
// cleanup … return output;}
![Page 60: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/60.jpg)
loadjava -v -u hr query.js
![Page 61: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/61.jpg)
create or replace and resolve java source named "InvokeScript" as import javax.script.*; import oracle.sql.*; import oracle.jdbc.*; import java.sql.*; import java.net.*; import java.io.*;
public class InvokeScript { public static oracle.sql.CLOB eval(String inputId) throws Exception { String output = new String(); Connection con = DriverManager.getConnection("jdbc:default:connection:"); CLOB cl = CLOB.createTemporary(con, true, CLOB.DURATION_CALL);
try { ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName("javascript"); engine.eval(new InputStreamReader(InvokeScript.class.getResourceAsStream("query.js"))); Invocable invocable = (Invocable) engine; Object selectResult = invocable.invokeFunction("selectQuery", inputId); output = selectResult.toString(); } catch(Exception e) { output = e.getMessage(); } cl.putString(1, output); return cl; } }
![Page 62: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/62.jpg)
CREATE OR REPLACE FUNCTION invokeScriptEval(inputId varchar2) return clob as language java name 'InvokeScript.eval(java.lang.String) return oracle.sql.CLOB';/
![Page 63: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/63.jpg)
SELECT invokeScriptEval(1) FROM dual;
![Page 64: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/64.jpg)
Demo
![Page 65: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/65.jpg)
SODASimple Oracle Document Access
![Page 66: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/66.jpg)
http://www.oracle.com/technetwork/database/application-development/oracle-document-store/index.html
![Page 67: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/67.jpg)
http://download.oracle.com/otndocs/products/database/SchemalessAppDevWithOracle12c/SchemalessAppDevWithOracle12c.html
![Page 68: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/68.jpg)
![Page 69: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/69.jpg)
![Page 70: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/70.jpg)
![Page 71: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/71.jpg)
Loading External Libraries
![Page 72: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/72.jpg)
![Page 73: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/73.jpg)
loadjava -v -u hr mustache.js
![Page 74: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/74.jpg)
create or replace and compile java source named "InvokeMustache" asimport javax.script.*;import java.net.*;import java.io.*;
public class InvokeMustache { public static String eval(String template, String data) throws Exception { String output = new String(); try { // create a script engine manager ScriptEngineManager factory = new ScriptEngineManager();
// create a JavaScript engine ScriptEngine engine = factory.getEngineByName("javascript");
//read the script as a java resource engine.eval(new InputStreamReader(InvokeMustache.class.getResourceAsStream("mustache.js")));
Invocable invocable = (Invocable) engine; Object selectResult = invocable.invokeFunction("callMustache", template, data); output = selectResult.toString(); } catch(Exception e) { output =e.getMessage(); } return output; }}/
![Page 75: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/75.jpg)
CREATE OR REPLACE FUNCTION doMustache(template varchar2, data varchar2) return varchar2 as language java name 'InvokeMustache.eval(java.lang.String) return java.lang.String';/
![Page 76: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/76.jpg)
SELECT doMustache(t, d) FROM mustache_template WHERE id = 1;
![Page 77: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/77.jpg)
http://momentjs.com
![Page 78: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/78.jpg)
http://underscorejs.org
![Page 79: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/79.jpg)
Demo
![Page 80: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/80.jpg)
More things to explore…
![Page 81: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/81.jpg)
![Page 82: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/82.jpg)
![Page 83: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/83.jpg)
![Page 84: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/84.jpg)
![Page 85: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/85.jpg)
“While Oracle Nashorn runs ECMA-compliant JavaScript, it is important to note that objects normally accessible in a web browser are not available, for
example, console, window, and so on.”
http://www.oracle.com/technetwork/articles/java/jf14-nashorn-2126515.html
![Page 86: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/86.jpg)
![Page 87: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/87.jpg)
non-preemptive scheduling is not specific to OJVM but anything running in database session
![Page 88: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/88.jpg)
More investigation necessary
❖ CommonJS Modules❖ Polyfills for Nashorn (nashorn-polyfill.js)❖ Compile JavaScript to one file❖ WebJars
![Page 89: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/89.jpg)
https://github.com/nodyn/jvm-npm
https://github.com/coveo/nashorn-commonjs-modules
![Page 90: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/90.jpg)
Conclusion: JS in DB
❖ Interesting to follow and use when needed❖ Need a specific skill-set❖ Not that many “advanced” examples
![Page 91: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/91.jpg)
Resources
❖ Oracle Database 12.2 VM: http://www.oracle.com/technetwork/database/enterprise-edition/databaseappdev-vm-161299.html
❖ Doc: http://docs.oracle.com/database/122/JJDEV/GUID-9D7B5AF2-5F63-4484-968D-01EFB6A2D50F.htm#JJDEV-GUID-9D7B5AF2-5F63-4484-968D-01EFB6A2D50F
❖ API: https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/api.html
❖ Article: http://www.oracle.com/technetwork/articles/java/jf14-nashorn-2126515.html
❖ Blog Post: http://www.n-k.de/riding-the-nashorn/#_loading_scripts
❖ Special thanks to: Carsten Czarski & Kuassi Mensah
![Page 92: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/92.jpg)
Q&A www.apexRnD.bedgielis.blogspot.com@[email protected]
![Page 93: JavaScript straight from the Oracle Database](https://reader038.fdocuments.net/reader038/viewer/2022110109/5a6752727f8b9a656a8b465d/html5/thumbnails/93.jpg)
❖ Looking for consulting, training and development in Oracle Application Express (APEX)?
❖ Contact : www.apexRnD.be ❖ Mail : [email protected]
Consulting, Development, Training