DEV Community

Rajesh Vohra
Rajesh Vohra

Posted on

Getting Started with JavaScript in Oracle: Simple MLE Use Cases and Procedures

Oracle’s Multilingual Engine (MLE) allows you to run JavaScript directly inside the database alongside PL/SQL. This lets you create procedures, functions, and modules in JavaScript that can be called from PL/SQL. MLE is great for beginners because it makes it easy to mix SQL and JavaScript, run small tests quickly, and write reusable logic in a familiar language.

Anonymous Inline JavaScript Procedure

Use Case: Quickly test JavaScript logic without creating a module.

CREATE OR REPLACE PROCEDURE inline_js_demo
AS MLE LANGUAGE JAVASCRIPT PURE
{{
let msg = 'Hello from inline JavaScript!';
console.log(msg);
}};
/

BEGIN
inline_js_demo;
END;
/

What happens:

Quick execution of JS logic.

No module creation needed.

Useful for small computations or testing.

Calculate Sum of Two Numbers (PURE Execution)

Teaches: PURE environment, simple math logic

JavaScript Module
CREATE OR REPLACE MLE MODULE calc_mod
LANGUAGE JAVASCRIPT AS
export function sum(a, b) {
return a + b;
}
/

PURE Environment
CREATE OR REPLACE MLE ENV calc_env
IMPORTS ('calc_mod' MODULE calc_mod) PURE;
/

Procedure
CREATE OR REPLACE FUNCTION js_add(p_a NUMBER, p_b NUMBER)
RETURN NUMBER
AS MLE MODULE calc_mod ENV calc_env
SIGNATURE 'sum(num,num)';
/

Execution
SELECT js_add(10, 25) AS result FROM dual;

Convert text to Uppercase Using JS

Teaches: JS string functions, returning values

Inline JS Function
CREATE OR REPLACE FUNCTION js_upper(p_text VARCHAR2)
RETURN VARCHAR2
AS MLE LANGUAGE JAVASCRIPT
{{
let input = session.getInput('TEXT');
return input.toUpperCase();
}}
;
/

Call It
SELECT js_upper('hello oracle js mle') FROM dual;

Calculate Average Salary from a Table Using JavaScript SQL Driver

Teaches: Executing SQL inside JavaScript (MLE SQL driver)

JavaScript Module
CREATE OR REPLACE MLE MODULE emp_mod
LANGUAGE JAVASCRIPT AS
import * as oracledb from "mle-js-oracledb";

export function avgSalary() {
let conn = oracledb.defaultConnection();
let rs = conn.query(SELECT AVG(salary) avg_sal FROM Employees);
return rs[0].AVG_SAL;
}
/

Procedure + Call Spec
CREATE OR REPLACE FUNCTION js_emp_avg
RETURN NUMBER
AS MLE MODULE emp_mod
SIGNATURE 'avgSalary()';
/

Usage
SELECT js_emp_avg FROM dual;

Top comments (0)