General Information
Library Note
Morgan's Library Page Header
Which has the higher priority in your organization: Deploying a new database or securing the ones you already have?
Looking for a website, and resources, dedicated solely to securing Oracle databases? Check out DBSecWorx .
Purpose
Used to execute a Java Script file stored in the file system.
AUTHID
CURRENT_USER
Dependencies
Documented
Yes: Packages and Types Reference
Exceptions
Error Code
Reason
ORA-29532
Java call terminated by uncaught Java exception: java.lang.Error: No such resource found
First Available
12.2
Security Model
Owned by SYS with EXECUTE granted to PUBIC
Source
{ORACLE_HOME}/rdbms/admin/initdbj.sql
RUN
Run a java script
dbms_javascript.run(script_name IN VARCHAR2);
exec dbms_javascript.run ('/home/oracle/jscripts/uwprocess.js');
Demo
Full package demo
-- create file and store at $ORACLE_HOME/rdbms/jlib
var Driver = Packages.oracle.jdbc.OracleDriver;
var oracleDriver = new Driver();
var url = "jdbc:default:connection:"; // server-side JDBC driver
var query ="SELECT first_name, last_name from employees";
// Establish a JDBC connection
var connection = oracleDriver.defaultConnection();
// Prepare statement
var preparedStatement = connection.prepareStatement(query);
// execute Query
var resultSet = preparedStatement.executeQuery();
// display results
while(resultSet.next()) {
print(resultSet.getString(1) + " == " + resultSet.getString(2) + " " );
}
// cleanup
resultSet.close();
preparedStatement.close();
connection.close();
SQL> CREATE ROLE c##nashorn;
Role created.
SQL> exec dbms_java.grant_permission('C##NASHORN', 'SYS:java.lang.RuntimePermission', 'createClassLoader', '' );
Call completed.
SQL> exec dbms_java.grant_permission('C##NASHORN', 'SYS:java.lang.RuntimePermission', 'getClassLoader', '' );
PL/SQL procedure successfully completed.
SQL> exec dbms_java.grant_permission('C##NASHORN', 'SYS:java.util.logging.LoggingPermission', 'control', '' );
PL/SQL procedure successfully completed.
GRANT c##nashorn TO hr;
Grant succeeded.
SQL> exec dbms_java.loadjava('-v -r rdbms/jlib/database.js');
PL/SQL procedure successfully completed.
SQL> hr/hr@orcl
SQL> serveroutput on
SQL> exec dbms_java.set_output(80000);
PL/SQL procedure successfully completed.
SQL> exec dbms_javascript.run ('rdbms/jlib/database.js'); Dan == Morgan
PL/SQL procedure successfully completed.
SQL> exec dbms_java.dropjava('-s rdbms/jlib/database.js');
PL/SQL procedure successfully completed.