Oracle DBMS_JAVA
Version 21c

General Information
Library Note Morgan's Library Page Header
ACE Director Alum Daniel Morgan, founder of Morgan's Library, is scheduling complimentary technical Workshops on Database Security for the first 30 Oracle Database customers located anywhere in North America, EMEA, LATAM, or APAC that send an email to asra_us@oracle.com. Request a Workshop for your organization today.
Purpose Provides a PL/SQL interface for accessing database functionality from Java.

Because this package contains 90 functions and procedures this page is not complete. Only the active subprogram links, below, have been documented here.
AUTHID CURRENT_USER
Data Types TYPE compiler_option_type IS RECORD(option_line VARCHAR2(128));

TYPE compiler_option_type_table IS TABLE OF compiler_option_type;
Dependencies
ALL_JAVA_COMPILER_OPTIONS DBMS_JAVA_DEFINERS GET_ERROR$
CBA_JAVA_COMPILER_OPTIONS DBMS_JAVA_MISC JAVAVM_SYS
DBA_JAVA_COMPILER_OPTIONS DBMS_JAVA_TEST JVMRJBCINV
DBA_OBJECTS DBMS_JVM_EXP_PERMS PLITBLM
DBJ_SHORT_NAME DBMS_OUTPUT USER_JAVA_COMPILER_OPTIONS
DBMS_ASSERT    
Documented Yes: Packages and Types Reference
Exceptions
Error Code Reason
ORA-29532 Untrapped Java Exception
First Available At or prior to 10.1
Security Model Owned by SYS with EXECUTE granted to PUBLIC
Source {ORACLE_HOME}/rdbms/admin/initdbj.sql
Subprograms
COMPILE_CLASS FULL_NCOMP_ENABLED REVOKE_PERMISSION
COMPILE_METHOD GETVERSION RUNJAVA
DBMS_FEATURE_OJVM GET_COMPILER_OPTION RUNJAVA_IN_CURRENT_SESSION
DBMS_FEATURE_SYSTEM_OJVM GET_JDK_VERSION SEND_COMMAND
DECODE_NATIVE_COMPILER_OPTION GET_OJVM_PROPERTY SET_COMPILER_OPTION
DELETE_PERMISSION GET_PROPERTY SET_EXECUTE_PRIVILEGE
DERIVEDFROM GET_REPLY SET_FIXED_IN_INSTANCE
DISABLE_OUTPUT_TO_FILE GRANT_PERMISSION SET_NATIVE_COMPILER_OPTION
DISABLE_OUTPUT_TO_JAVA GRANT_POLICY_PERMISSION SET_OUTPUT
DISABLE_OUTPUT_TO_SQL IMPORT_RAW_CHUNK SET_OUTPUT_TO_FILE
DISABLE_OUTPUT_TO_TRC IMPORT_TEXT_CHUNK SET_OUTPUT_TO_JAVA
DISABLE_PERMISSION INITIALIZE_OUTPUT_TO_FILE SET_OUTPUT_TO_SQL
DROPJAVA INIT_BTL SET_PERMISSION_DEBUG
DUMP_NATIVE_MACHINE_CODE LOADJAVA SET_PREFERENCE
ENABLE_OUTPUT_TO_FILE LONGNAME SET_PROPERTY
ENABLE_OUTPUT_TO_JAVA NATIVE_COMPILER_OPTIONS SET_RUNTIME_EXEC_CREDENTIALS
ENABLE_OUTPUT_TO_SQL NCOMP_STATUS_MSG SET_SYSTEM_CLASS_LOADING
ENABLE_OUTPUT_TO_TRC OPTION_CONTROLLER SET_VERIFIER
ENABLE_PERMISSION QUERY_OUTPUT_TO_FILE SHAREDPRIVATECLASSNAME
ENDSESSION QUERY_OUTPUT_TO_JAVA SHORTNAME
ENDSESSION_AND_RELATED_STATE QUERY_OUTPUT_TO_SQL SHOW_PROPERTY
END_EXPORT QUERY_OUTPUT_TO_TRC START_BTL
END_IMPORT REMOVE_OUTPUT_TO_FILE START_EXPORT
EXPORT_CLASS REMOVE_OUTPUT_TO_JAVA START_IMPORT
EXPORT_RAW_CHUNK REMOVE_OUTPUT_TO_SQL START_JMX_AGENT
EXPORT_RESOURCE REMOVE_PROPERTY STOP_BTL
EXPORT_SOURCE RESET_COMPILER_OPTION TERMINATE_BTL
EXPORT_TEXT_CHUNK RESET_PROPERTY_DEFS_TABLE_FLAG UNCOMPILE_CLASS
FINALIZE_OUTPUT_TO_FILE RESOLVER UNCOMPILE_METHOD
FIXED_IN_INSTANCE RESTRICT_PERMISSION UNSET_NATIVE_COMPILER_OPTION
 
DBMS_FEATURE_OJVM
Undocumented dbms_java.dbms_feature_ojvm(
ojvm_boolean OUT NUMBER,
aux_count    OUT NUMBER,
ojvm_info    OUT CLOB);
TBD
 
DBMS_FEATURE_SYSTEM_OJVM
Undocumented dbms_java.dbms_feature_system_ojvm(
ojvm_boolean OUT NUMBER,
aux_count    OUT NUMBER,
ojvm_info    OUT CLOB);
TBD
 
DECODE_NATIVE_COMPILER_OPTION
Undocumented dbms_java.decode_native_compiler_option(
optionName IN VARCHAR2,
value      IN VARCHAR2)
RETURN VARCHAR2;
TBD
 
DISABLE_OUTPUT_TO_FILE
Undocumented dbms_java.disable_output_to_file(id IN VARCHAR2) RETURN VARCHAR2;
TBD
 
DISABLE_OUTPUT_TO_SQL
Undocumented dbms_java.disable_output_to_sql(id IN VARCHAR2) RETURN VARCHAR2;
TBD
 
DISABLE_OUTPUT_TO_TRC
Undocumented dbms_java.disable_output_to_trc;
exec dbms_java.disable_output_to_trc;
 
DISABLE_PERMISSION
Undocumented dbms_java.disable_output_to_sql(key IN NUMBER);
TBD
 
DROPJAVA
Drops classes within the database using a call, rather than through the dropjava command-line tool dbms_java.dropjava(options IN VARCHAR2) AS LANGUAGE JAVA NAME 'oracle.aurora.server.tools.loadjava.DropJavaMain.serverMain(java.lang.String)';
exec dbms_java.dropjava('-s rdbms/jlib/schagent.jar');
 
DUMP_NATIVE_MACHINE_CODE
Dump the native code (if available) for the specified method to trace dbms_java.dump_native_machine_code(
classname  IN VARCHAR2,
methodname IN VARCHAR2,
methodsig  IN VARCHAR2);
TBD
 
ENENABLE_OUTPUT_TO_FILE
Undocumented dbms_java.enable_output_to_file(id IN VARCHAR2) RETURN VARCHAR2;
TBD
 
ENABLE_OUTPUT_TO_SQL
Undocumented dbms_java.enable_output_to_sql(id IN VARCHAR2) RETURN VARCHAR2;
TBD
 
ENABLE_OUTPUT_TO_TRC
Undocumented dbms_java.enable_output_to_trc;
exec dbms_java.enable_output_to_trc;
 
ENABLE_PERMISSION
Undocumented dbms_java.eable_output_to_sql(key IN NUMBER);
TBD
 
ENDSESSION
Undocumented dbms_java.endsession RETURN VARCHAR2;
TBD
 
END_EXPORT
Undocumented dbms_java.end_export RETURN NUMBER;
TBD
 
GETVERSION
Retrieves the database version dbms_java.getVersion RETURN VARCHAR2;
SELECT dbms_java.getVersion
FROM dual;
 
GET_JDK_VERSION
Retrieves the database JDK version dbms_java.get_jdk_version RETURN VARCHAR2;
SELECT dbms_java.get_jdk_version
FROM dual;
 
GRANT_PERMISSION
Grants Property Permissions. Create an active row in the policy table granting the Permission as specified to grantee/

This demo courtesy of Ralph Mintel. On was testing in 11.2.0.1 it was valid.
dbms_java.grant_permission(
grantee           IN  VARCHAR2,
permission_type   IN  VARCHAR2,
permission_name   IN  VARCHAR2,
permission_action IN  VARCHAR2,
key               OUT NUMBER)
AS LANGUAGE JAVA NAME 'oracle.aurora.rdbms.security.PolicyTableManager.grant(
java.lang.String, java.lang.String, java.lang.String, java.lang.String, long[])';
-- ==============================================
-- Oracle Java Functions
-- Oracle dba_java_policy
-- Variation on Tom Kyte's java system properties.
-- Ralph Mintel Mar. 21, 2008
-- ==============================================


col name format a40
col value format a60
col id format 999

-- =============================================
-- Function to retrieve all of the java properties.
-- =============================================


CREATE OR REPLACE FUNCTION jp RETURN VARCHAR2 AUTHID DEFINER IS LANGUAGE JAVA
  NAME 'java.lang.System.getProperties()
  return java.lang.String';
/

-- =============================================
-- the following will probably fail with ORA-29532:
-- Java call terminated by uncaught Java exception:
-- java.security.AccessControlException:
-- (java.util.PropertyPermission * read,write)
-- has not been granted to UWCLASS.
-- =============================================


SELECT get_java_system_property() FROM dual;

-- =============================================
-- Grant java PropertyPermission...
-- =============================================

conn sys@pdbdev as sysdba

desc dba_java_policy;

exec dbms_java.grant_permission('UWCLASS', 'SYS:java.util.PropertyPermission', '*', 'read,write');

-- =============================================
-- Back to our user...
-- =============================================


conn uwclass/uwclass@pdbdev

col name format a40
col value format a60
col id format 999

SELECT jp() FROM dual;

-- =============================================
-- Create a table for these java properties...
-- =============================================


CREATE TABLE java_properties (
rid   NUMBER,
name  VARCHAR2(40),
value VARCHAR2(660) DEFAULT NULL);

-- =============================================
-- Insert each java property name-value pair into a table.
--
-- The entire block of properties starts with '{'
-- and ends with '}'.
--
-- The property name=value sets are comma delimited.
-- '=' separates the name and value.
-- =============================================


set serveroutput on

DECLARE
 s VARCHAR2(4000);
 x PLS_INTEGER;
 y PLS_INTEGER;

 id           PLS_INTEGER := 1;
 lastone      BOOLEAN := FALSE;
 xname_size   PLS_INTEGER;
 xvalue_start PLS_INTEGER;
 xvalue_size  PLS_INTEGER;
BEGIN
  SELECT jp() INTO s FROM dual;

  x := 2; /* starting column in s, to ignore the opening { */
  y := 1; /* column where comma separator is found. */

  LOOP
    y := INSTR(s, ',', x, 1);
    IF (y < 1) THEN
      y := INSTR(s, '}', x, 1);
      lastone := true;
    END IF;

    dbms_output.put_line(SUBSTR(s, x, y-x));

    xname_size := INSTR(s, '=', x, 1) - x;
    xvalue_start := x + xname_size + 1;
    xvalue_size := INSTR(s, ',', xvalue_start, 1) - xvalue_start;

    IF (lastone) THEN
      xvalue_size := INSTR(s, '}', xvalue_start, 1) - xvalue_start;
    END IF;

    IF (xvalue_size > 0) THEN
      INSERT INTO java_properties
      (rid, name, value)
      VALUES (
      id, SUBSTR(s, x, xname_size), SUBSTR(s, xvalue_start, xvalue_size));
    ELSE
      INSERT INTO java_properties (id, name)
      (rid, name)
      VALUES
      (id, SUBSTR(s, x, xname_size));
    END IF;
    id := id + 1;

    IF (lastone) THEN
      EXIT;
    END IF;

    x := y + 2;
  END LOOP;
END;
/

-- =============================================
-- A mystery...
-- The property 'user.region=US' disappeared.
-- It was there yesterday!
-- Is it on your system? Today? Tomorrow?
-- =============================================


SELECT * FROM java_properties ORDER BY name;

SELECT * FROM java_properties WHERE value IS NULL ORDER BY name;

-- =============================================
-- Revoke java PropertyPermission...
-- =============================================


conn sys@pdbdev as sysdba

CALL dbms_java.revoke_permission('UWCLASS', 'SYS:java.util.PropertyPermission', '*', 'read,write');

set linesize 121
col grantee format a10
col type_schema format a5
col type_name format a30
col name format a20
col action format a20
col enabled format a10

SELECT * FROM dba_java_policy
WHERE grantee = 'UWCLASS';

SELECT COUNT(*) FROM dba_java_policy;

SELECT * FROM dba_java_policy;

-- =============================================
-- Back to our user...
-- =============================================


conn uwclass/uwclass@pdbdev

set pagesize 30
set linesize 121
col name format a40
col value format a60
col id format 999
set serveroutput on
ALTER SESSION SET PLSQL_WARNINGS='ENABLE:ALL';

-- =============================================
-- The following should fail because of revoked permission...
-- =============================================


SELECT jp() FROM dual;

-- =============================================
-- But we still have our java_properties table...
-- =============================================


SELECT * FROM java_properties;

-- =============================================
-- Java & Oracle predefined permissions are described:
-- https://youngcow.net/doc/oracle10g/java.102/b14187/chnine.htm
-- =============================================
 
LOADJAVA
Loads Java classes into the database

See: ?/rdbms/admin/initsjty.sql
dbms_java.loadjava(option IN VARCHAR2) AS LANGUAGE JAVA NAME 'oracle.aurora.server.tools.loadjava.LoadJavaMain.serverMain(java.lang.String)';
exec sys.dbms_java.loadjava('-v -r rdbms/jlib/sqljtype.jar');
 
RESET_PROPERTY_DEFS_TABLE_FLAG
Undocumented dbms_java.reset_property_defs_table_flag;
exec dbms_java.reset_property_defs_table_flag;
 
REVOKE_PERMISSION
Disables any permissions that might have been granted dbms_java.revoke_permission(
grantee           IN VARCHAR2,
permission_type   IN VARCHAR2,
permission_name   IN VARCHAR2,
permission_action IN VARCHAR2)
AS LANGUAGE JAVA NAME 'oracle.aurora.rdbms.security.PolicyTableManager.revoke(
java.lang.String, java.lang.String, java.lang.String, java.lang.String)';
See GRANT_PERMISSION Demo Above
 
SET_EXECUTE_PRIVILEGE
Undocumented dbms_java.set_execute_privilege(
object_name     IN VARCHAR2,
object_schema   IN VARCHAR2,
object_type     IN VARCHAR2,
grantee_name    IN VARCHAR2,
grant_if_nonero IN NUMBER);
TBD
 
SET_OUTPUT
Method for controlling destination of java output dbms_java.set_output(buffersize IN NUMBER);
exec dbms_java.set_output(1000000);
 
SET_RUNTIME_EXEC_CREDENTIALS
Associate all database users with the OS account identified by credential pair 'osuser'/'ospass'. The association is in effect for any user that does not have credentials

Overload 1
dbms_java.set_runtime_exec_credentials(
dbuser IN VARCHAR2,
osuser IN VARCHAR2,
ospass IN VARCHAR2);
TBD
Overload 2 dbms_java.set_runtime_exec_credentials(
osuser IN VARCHAR2,
ospass IN VARCHAR2);
TBD
 
SHORTNAME
Returns the shorted class name dbms_java.shortname(longname IN VARCHAR2) RETURN VARCHAR2;
SELECT dbms_java.shortname('oracle/mgd/idcode/IDCodeTranslator')
FROM dual;
 
START_BTL
Undocumented dbms_java.start_btl;
SELECT dbms_java.start_btl;
 
START_EXPORT
Undocumented dbms_java.start_export(
short_name            IN  VARCHAR2,
schema                IN  VARCHAR2,
flags                 IN  NUMBER,
type                  IN  NUMBER,
properties            OUT NUMBER,
raw_chunk_count       OUT NUMBER,
total_raw_byte_count  OUT NUMBER,
text_chunk_count      OUT NUMBER,
total_text_byte_count OUT NUMBER)
RETURN NUMBER;
TBD
 
STOPBTL
Undocumented dbms_java.stop_btl;
SELECT dbms_java.stop_btl;
 
TERMINATE_BTL
Undocumented dbms_java.terminate_btl;
SELECT dbms_java.terminate_btl;

Related Topics
Built-in Functions
Built-in Packages
Database Security
DBMS_JAVA_DEFINER
DBMS_JAVA_DEV
DBMS_JAVA_DUMP
DBMS_JAVA_MISC
DBMS_JAVA_TEST
OJDS_NAMESPACE
RMJVM
Java Functions
What's New In 21c
What's New In 23c
GETVERSION