DBA Data[Home] [Help]

PACKAGE BODY: SYS.DBMS_JAVA

Source


1 package body dbms_java as
2 
3   PROCEDURE start_btl as language java name
4     'oracle.aurora.perf.OracleBTL.startBTL()';
5 
6   PROCEDURE stop_btl as language java name
7     'oracle.aurora.perf.OracleBTL.stopBTL()';
8 
9   PROCEDURE terminate_btl as language java name
10     'oracle.aurora.perf.OracleBTL.terminateBTL()';
11 
12   FUNCTION init_btl(files_prefix VARCHAR2, type NUMBER,
13                     sample_limit NUMBER, exclude_java NUMBER) return NUMBER as language java name
14   'oracle.aurora.perf.OracleBTL.initBTL(java.lang.String, int, long, boolean)
15           return boolean';
16 
17   FUNCTION compile_class(classname VARCHAR2) return NUMBER as
18     begin
19       return dbms_java_definers.compile_class_(sys_context('userenv', 'current_schema'),
20                                                classname);
21     end;
22 
23   FUNCTION compile_method(classname  VARCHAR2,
24                           methodname VARCHAR2,
25                           methodsig  VARCHAR2) return NUMBER as
26     begin
27       return dbms_java_definers.compile_method_(sys_context('userenv', 'current_schema'),
28                                                 classname, methodname,
29                                                 methodsig);
30     end;
31 
32   FUNCTION uncompile_class(classname VARCHAR2,
33                            permanentp NUMBER default 0) return NUMBER as
34     begin
35       -- call-specs can't have default params
36       return dbms_java_definers.uncompile_class_(sys_context('userenv', 'current_schema'),
37                                                  classname, permanentp);
38     end;
39 
40   FUNCTION uncompile_class(schema    VARCHAR2,
41                            classname VARCHAR2,
42                            permanentp NUMBER default 0) return NUMBER as
43     begin
44       -- call-specs can't have default params
45       return dbms_java_definers.uncompile_class_(schema, classname, permanentp);
46     end;
47 
48 
49   FUNCTION uncompile_method(classname  VARCHAR2,
50                             methodname VARCHAR2,
51                             methodsig  VARCHAR2,
52                             permanentp NUMBER default 0) return NUMBER as
53     begin
54       -- call-specs can't have default params
55       return dbms_java_definers.uncompile_method_(sys_context('userenv', 'current_schema'),
56                                                   classname, methodname,
57                                                   methodsig, permanentp);
58     end;
59 
60   FUNCTION uncompile_method(schema     VARCHAR2,
61                             classname  VARCHAR2,
62                             methodname VARCHAR2,
63                             methodsig  VARCHAR2,
64                             permanentp NUMBER default 0) return NUMBER as
65     begin
66       -- call-specs can't have default params
67       return dbms_java_definers.uncompile_method_(schema, classname,
68                                                   methodname, methodsig,
69                                                   permanentp);
70     end;
71 
72   PROCEDURE dump_native_machine_code(classname  VARCHAR2,
73                                      methodname VARCHAR2,
74                                      methodsig  VARCHAR2) as language java name
75     'oracle.aurora.vm.OracleRuntime.dumpNativeMachineCode(java.lang.String,
76                                                           java.lang.String,
77                                                           java.lang.String)';
78 
79   FUNCTION native_compiler_options return compiler_option_type_table pipelined as
80     opstr  varchar2(4000);
81     token  varchar2(4000);
82     newline constant varchar2(2) := chr(10);
83     opidx  number;
84     lastidx   number;
85     idx    number;
86     n      number;
87     line   compiler_option_type;
88   begin
89     opidx := 0;
90     opstr := dbms_java_definers.get_nth_native_compiler_option(opidx);
91     while opstr is not null loop
92       idx := instr(opstr, newline);
93       lastidx := 0;
94       while idx <> 0 loop
95         token := substr(opstr, lastidx + length(newline), idx - lastidx - length(newline));
96         lastidx := idx;
97         line.option_line := token;
98         PIPE ROW(line);
99         idx := instr(opstr, newline, idx + length(newline));
100       end loop;
101 
102       opidx := opidx + 1;
103       opstr := dbms_java_definers.get_nth_native_compiler_option(opidx);
104     end loop;
105   end;
106 
107   PROCEDURE set_native_compiler_option(optionName VARCHAR2,
108                                        value VARCHAR2) as
109     begin
110       dbms_java_definers.set_native_compiler_option_(optionName,
111                                                      value,
112                                                      sys_context('userenv','current_schemaid'));
113     end;
114 
115 
116   PROCEDURE unset_native_compiler_option(optionName VARCHAR2,
117                                          value      VARCHAR2) as
118     begin
119       dbms_java_definers.unset_native_compiler_option_(optionName,
120                                                        value,
121                                                        sys_context('userenv','current_schemaid'));
122     end;
123 
124   FUNCTION decode_native_compiler_option(optionName VARCHAR2,
125                                          value      VARCHAR2) RETURN VARCHAR2 as
126     begin
127       return dbms_java_definers.decode_native_compiler_option_(optionName, value);
128     end;
129 
130 
131   FUNCTION longname (shortname VARCHAR2) RETURN VARCHAR2 as language java name
132     'oracle.aurora.rdbms.DbmsJava.longNameForSQL(java.lang.String)
133           return java.lang.String';
134 
135   FUNCTION shortname (longname VARCHAR2) RETURN VARCHAR2 as language java name
136      'oracle.aurora.rdbms.DbmsJava.shortName(java.lang.String)
137            return java.lang.String';
138 
139   FUNCTION get_compiler_option(what VARCHAR2, optionName VARCHAR2)
140     RETURN varchar2
141     as language java name
142     'oracle.aurora.jdkcompiler.CompilerOptions.get(java.lang.String, java.lang.String) return java.lang.String' ;
143 
144   PROCEDURE set_compiler_option(what VARCHAR2, optionName VARCHAR2, value VARCHAR2)
145   as language java name
146   'oracle.aurora.jdkcompiler.CompilerOptions.set(java.lang.String, java.lang.String, java.lang.String)' ;
147 
148 
149   PROCEDURE reset_compiler_option(what VARCHAR2, optionName VARCHAR2)
150   as language java name
151   'oracle.aurora.jdkcompiler.CompilerOptions.reset(java.lang.String, java.lang.String)' ;
152 
153   FUNCTION resolver (name VARCHAR2, owner VARCHAR2, type VARCHAR2)
154      RETURN VARCHAR2 as language java name
155      'oracle.aurora.rdbms.DbmsJava.resolver(java.lang.String,
156                                             oracle.sql.CHAR,
157                                             java.lang.String)
158              return oracle.sql.CHAR';
159 
160   FUNCTION derivedFrom (name VARCHAR2, owner VARCHAR2, type VARCHAR2)
161      RETURN VARCHAR2 as language java name
162      'oracle.aurora.rdbms.DbmsJava.derivedFrom(java.lang.String,
163                                                oracle.sql.CHAR,
164                                                java.lang.String)
165              return java.lang.String';
166 
167   FUNCTION sharedPrivateClassName (name VARCHAR2)
168      RETURN VARCHAR2 as language java name
169      'oracle.aurora.rdbms.DbmsJava.sharedPrivateClassName(java.lang.String)
170              return java.lang.String';
171 
172   FUNCTION fixed_in_instance (name VARCHAR2, owner VARCHAR2, type VARCHAR2)
173      RETURN NUMBER as language java name
174      'oracle.aurora.rdbms.DbmsJava.fixedInInstance(java.lang.String,
175                                                    oracle.sql.CHAR,
176                                                    java.lang.String)
177              return boolean';
178 
179   PROCEDURE set_fixed_in_instance (name VARCHAR2, owner VARCHAR2,
180                                    type VARCHAR2, value NUMBER)
181      as language java name
182      'oracle.aurora.rdbms.DbmsJava.setFixedInInstance(java.lang.String,
183                                                       oracle.sql.CHAR,
184                                                       java.lang.String,
185                                                       boolean)';
186 
187   -- RUNJAVA interface
188   FUNCTION runjava(cmdline VARCHAR2) RETURN VARCHAR2 as begin
189       execute immediate 'select sys.dbms_java_misc.runjava(1) from dual';
190       return dbms_java_misc.runjava(cmdline);
191     end;
192 
193   FUNCTION runjava_in_current_session(cmdline VARCHAR2) RETURN VARCHAR2 as begin
194       execute immediate 'select sys.dbms_java_misc.runjava_in_current_session(1) from dual';
195       return dbms_java_misc.runjava_in_current_session(cmdline);
196     end;
197 
198   FUNCTION endsession RETURN VARCHAR2 as
199     begin
200       return dbms_java_test.funcall('-endsession', ' ');
201     end;
202 
203   FUNCTION endsession_and_related_state RETURN VARCHAR2 as
204     begin
205       return dbms_java_test.funcall('-endsession', ' ', 'x');
206     end;
207 
208   FUNCTION set_property(name VARCHAR2, value VARCHAR2) RETURN VARCHAR2 as
209     begin
210       return dbms_java_test.funcall('-setprop', ' ', name, value);
211     end;
212 
213   FUNCTION get_property(name VARCHAR2) RETURN VARCHAR2 as
214     begin
215       return dbms_java_test.funcall('-getprop', ' ', name);
216     end;
217 
218   FUNCTION remove_property(name VARCHAR2) RETURN VARCHAR2 as
219     begin
220       return dbms_java_test.funcall('-setprop', ' ', name, '', 'x');
221     end;
222 
223   FUNCTION show_property(name VARCHAR2) RETURN VARCHAR2 as
224     begin
225       return dbms_java_test.funcall('-showprop', ' ', name);
226     end;
227 
228   -- Methods for controlling destination of java output
229   PROCEDURE set_output (buffersize NUMBER) as
230      junk varchar2(20);
231      sz number := buffersize;
232      begin
233        if sz <= 0 then sz := 20000; end if;
234        if sz > 1000000 then sz := 1000000; end if;
235        dbms_output.enable(sz);
236        junk := set_output_to_sql('dbout',
237                                  'call dbms_output.put_line(:1)',
238                                  'TEXT',
239                                  'call dbms_output.put(:1)',
240                                  'TEXT',
241                                  'call dbms_output.new_line()',
242                                  ' ',
243                                  255,
244                                  eager => 1);
245      end;
246 
247   FUNCTION set_output_to_sql (id VARCHAR2,
248                               stmt VARCHAR2,
249                               bindings VARCHAR2,
250                               no_newline_stmt VARCHAR2 default null,
251                               no_newline_bindings VARCHAR2 default null,
252                               newline_only_stmt VARCHAR2 default null,
253                               newline_only_bindings VARCHAR2 default null,
254                               maximum_line_segment_length NUMBER default 0,
255                               allow_replace NUMBER default 1,
256                               from_stdout NUMBER default 1,
257                               from_stderr NUMBER default 1,
258                               include_newlines NUMBER default 0,
259                               eager NUMBER default 0) return VARCHAR2 as
260     flags number := 0;
261     replace number := allow_replace;
262     maxlen number := maximum_line_segment_length;
263   begin
264     if id is null then return 'ID must not be null'; end if;
265     if length(id) > 30 then
266       return 'ID length must not be greater than 30'; end if;
267     if stmt is null then return 'STMT must not be null'; end if;
268     if bindings is null then return 'BINDINGS must not be null'; end if;
269     if allow_replace !=0 then replace := 1; end if;
270     if from_stdout != 0 then flags := flags + 1; end if;
271     if from_stderr != 0 then flags := flags + 2; end if;
272     if flags = 0 then
273       return 'one of FROM_STDOUT or FROM_STDERR must be true (non zero)';
274     end if;
275     if eager != 0 then flags := flags + 4; end if;
276     if include_newlines != 0 then flags := flags + 8; end if;
277     if maxlen is null then maxlen := 0; end if;
278     if maxlen < 0 or maxlen != floor(maxlen) then
279       return 'MAXIMUM_LINE_SEGMENT_LENGTH must be a non zero integer'; end if;
280 
281     return dbms_java_test.funcall('-set_output_to_sql', ' ',
282                                   id,
283                                   replace,
284                                   stmt,
285                                   bindings,
286                                   no_newline_stmt,
287                                   no_newline_bindings,
288                                   newline_only_stmt,
289                                   newline_only_bindings,
290                                   maximum_line_segment_length,
291                                   flags);
292   end;
293 
294   FUNCTION remove_output_to_sql (id VARCHAR2) return VARCHAR2 as
295   begin
296     return dbms_java_test.funcall('-remove_output_to_sql', ' ', id);
297   end;
298 
299   FUNCTION enable_output_to_sql (id VARCHAR2) return VARCHAR2 as
300   begin
301     return dbms_java_test.funcall('-enable_output_to_sql', ' ', id);
302   end;
303 
304   FUNCTION disable_output_to_sql (id VARCHAR2) return VARCHAR2 as
305   begin
306     return dbms_java_test.funcall('-disable_output_to_sql', ' ', id);
307   end;
308 
309   FUNCTION query_output_to_sql (id VARCHAR2) return VARCHAR2 as
310   begin
311     return dbms_java_test.funcall('-query_output_to_sql', ' ', id);
312   end;
313 
314   FUNCTION set_output_to_java_ (id VARCHAR2,
315                                class_name VARCHAR2,
316                                class_schema VARCHAR2,
317                                method VARCHAR2,
318                                bindings VARCHAR2,
319                                no_newline_method VARCHAR2 default null,
320                                no_newline_bindings VARCHAR2 default null,
321                                newline_only_method VARCHAR2 default null,
322                                newline_only_bindings VARCHAR2 default null,
323                                maximum_line_segment_length NUMBER default 0,
324                                allow_replace NUMBER default 1,
325                                from_stdout NUMBER default 1,
326                                from_stderr NUMBER default 1,
327                                include_newlines NUMBER default 0,
328                                eager NUMBER default 0,
329                                initialization_statement VARCHAR2 default null,
330                                finalization_statement VARCHAR2 default null,
331                                call_type NUMBER)
332          return VARCHAR2 as
333     flags number := 0;
334     replace number := allow_replace;
335     maxlen number := maximum_line_segment_length;
336   begin
337     if id is null then return 'ID must not be null'; end if;
338     if call_type != 1 and substr(ID, 1, 4) = '_tf_' then
339       return 'ID must not begin with ''_tf_'''; end if;
340     if length(id) > 30 then
341       return 'ID length must not be greater than 30'; end if;
342     if class_name is null then return 'CLASS_NAME must not be null'; end if;
343     if method is null then return 'METHOD must not be null'; end if;
344     if bindings is null then return 'BINDINGS must not be null'; end if;
345     if allow_replace !=0 then replace := 1; end if;
346     if from_stdout != 0 then flags := flags + 1; end if;
347     if from_stderr != 0 then flags := flags + 2; end if;
348     if flags = 0 then
349       return 'one of FROM_STDOUT or FROM_STDERR must be true (non zero)';
350     end if;
351     if eager != 0 then flags := flags + 4; end if;
352     if include_newlines != 0 then flags := flags + 8; end if;
353     if maxlen is null then maxlen := 0; end if;
354     if maxlen < 0 or maxlen != floor(maxlen) then
355       return 'MAXIMUM_LINE_SEGMENT_LENGTH must be a non zero integer'; end if;
356 
357     return dbms_java_test.funcall('-set_output_to_java', ' ',
358                                   id,
359                                   replace,
360                                   class_name,
361                                   class_schema,
362                                   method,
363                                   bindings,
364                                   no_newline_method,
365                                   no_newline_bindings,
369                                   flags,
366                                   newline_only_method,
367                                   newline_only_bindings,
368                                   maximum_line_segment_length,
370                                   initialization_statement,
371                                   finalization_statement);
372   end;
373 
374   FUNCTION set_output_to_java (id VARCHAR2,
375                                class_name VARCHAR2,
376                                class_schema VARCHAR2,
377                                method VARCHAR2,
378                                bindings VARCHAR2,
379                                no_newline_method VARCHAR2 default null,
380                                no_newline_bindings VARCHAR2 default null,
381                                newline_only_method VARCHAR2 default null,
382                                newline_only_bindings VARCHAR2 default null,
383                                maximum_line_segment_length NUMBER default 0,
384                                allow_replace NUMBER default 1,
385                                from_stdout NUMBER default 1,
386                                from_stderr NUMBER default 1,
387                                include_newlines NUMBER default 0,
388                                eager NUMBER default 0,
389                                initialization_statement VARCHAR2 default null,
390                                finalization_statement VARCHAR2 default null)
391          return VARCHAR2 as
392   begin
393     return set_output_to_java_ (id,
394                                class_name,
395                                class_schema,
396                                method,
397                                bindings,
398                                no_newline_method,
399                                no_newline_bindings,
400                                newline_only_method,
401                                newline_only_bindings,
402                                maximum_line_segment_length,
403                                allow_replace,
404                                from_stdout,
405                                from_stderr,
406                                include_newlines,
407                                eager,
408                                initialization_statement,
409                                finalization_statement,
410                                0);
411   end;
412 
413   FUNCTION enable_output_to_java (id VARCHAR2) return VARCHAR2 as
414   begin
415     return dbms_java_test.funcall('-enable_output_to_java', ' ', id);
416   end;
417 
418   FUNCTION disable_output_to_java (id VARCHAR2) return VARCHAR2 as
419   begin
420     return dbms_java_test.funcall('-disable_output_to_java', ' ', id);
421   end;
422 
423   FUNCTION remove_output_to_java (id VARCHAR2) return VARCHAR2 as
424   begin
425     return dbms_java_test.funcall('-remove_output_to_java', ' ', id);
426   end;
427 
428   FUNCTION query_output_to_java (id VARCHAR2) return VARCHAR2 as
429   begin
430     return dbms_java_test.funcall('-query_output_to_java', ' ', id);
431   end;
432 
433   FUNCTION set_output_to_file (id VARCHAR2,
434                                file_path VARCHAR2,
435                                allow_replace NUMBER default 1,
436                                from_stdout NUMBER default 1,
437                                from_stderr NUMBER default 1)
438          return VARCHAR2 as
439     full_id varchar2(30);
440   begin
441     if id is null then return 'ID must not be null'; end if;
442     if file_path is null then return 'FILE_PATH must not be null'; end if;
443     if length(id) > 26 then
444       return 'ID length must not be greater than 26'; end if;
445     full_id := '_tf_'||id;
446     return set_output_to_java_(full_id,
447                                'oracle/aurora/rdbms/DbmsJava',
448                                null,
449                                'writeOutputToFile',
450                                'ID TEXT',
451                                null,
452                                null,
453                                null,
454                                null,
455                                0,
456                                allow_replace,
457                                from_stdout,
458                                from_stderr,
459                                1,
460                                0,
461                                'call dbms_java.initialize_output_to_file('||
462                                   sys.dbms_assert.enquote_literal(full_id) ||','||
463                                   sys.dbms_assert.enquote_literal(file_path) ||')',
464                                'call dbms_java.finalize_output_to_file('||
465                                   sys.dbms_assert.enquote_literal(full_id) ||')',
466                                1);
467   end;
468 
469   FUNCTION remove_output_to_file (id VARCHAR2) return VARCHAR2 as
470   begin
471     return remove_output_to_java('_tf_'||id);
472   end;
473 
474   FUNCTION enable_output_to_file (id VARCHAR2) return VARCHAR2 as
475   begin
476     return enable_output_to_java('_tf_'||id);
477   end;
478 
479   FUNCTION disable_output_to_file (id VARCHAR2) return VARCHAR2 as
480   begin
481     return disable_output_to_java('_tf_'||id);
482   end;
483 
484   FUNCTION query_output_to_file (id VARCHAR2) return VARCHAR2 as
485   begin
486     return query_output_to_java('_tf_'||id);
487   end;
488 
489   PROCEDURE initialize_output_to_file (id VARCHAR2, path VARCHAR2) as
490     language java name
491     'oracle.aurora.rdbms.DbmsJava.initializeOutputToFile(java.lang.String,
492                                                          java.lang.String)';
493 
497 
494   PROCEDURE finalize_output_to_file (id VARCHAR2) as
495     language java name
496     'oracle.aurora.rdbms.DbmsJava.finalizeOutputToFile(java.lang.String)';
498 
499   PROCEDURE enable_output_to_trc as
500     trash varchar2(100) :=
501       dbms_java_test.funcall('-output_to_trc', ' ', 'ENABLE');
502   begin
503     null;
504   end;
505 
506   PROCEDURE disable_output_to_trc as
507     trash varchar2(100) :=
508       dbms_java_test.funcall('-output_to_trc', ' ', 'DISABLE');
509   begin
510     null;
511   end;
512 
513   FUNCTION query_output_to_trc return VARCHAR2 as
514   begin
515     return dbms_java_test.funcall('-output_to_trc', ' ', 'QUERY');
516   end;
517 
518 
519   -- import/export interface --
520   function start_export(short_name in varchar2,
521                         schema in varchar2,
522                         flags in number,
523                         type in number,
524                         properties out number,
525                         raw_chunk_count out number,
526                         total_raw_byte_count out number,
527                         text_chunk_count out number,
528                         total_text_byte_count out number)
529          return number
530   as language java name 'oracle.aurora.rdbms.DbmsJava.
531                          startExport(oracle.sql.CHAR, oracle.sql.CHAR,
532                                      int, int, int[], int[], int[], int[],
533                                      int[])
534                                   return int';
535 
536   function export_raw_chunk(chunk out raw, length out number)
537            return number
538   as language java name 'oracle.aurora.rdbms.DbmsJava.
539                          exportRawChunk(byte[][], int[]) return int';
540 
541   function export_text_chunk(chunk out varchar2, length out number)
542            return number
543   as language java name 'oracle.aurora.rdbms.DbmsJava.
544                          exportTextChunk(oracle.sql.CHAR[], int[]) return int';
545 
546   function end_export return number
547   as language java name 'oracle.aurora.rdbms.DbmsJava.endExport() return int';
548 
549   function start_import(long_name in varchar2,
550                         flags in number,
551                         type in number,
552                         properties in number,
553                         raw_chunk_count in number,
554                         total_raw_byte_count in number,
555                         text_chunk_count in number)
556          return number
557   as language java name 'oracle.aurora.rdbms.DbmsJava.
558                          startImport(oracle.sql.CHAR,
559                                      int, int, int, int, int, int)
560                                      return int';
561   function import_raw_chunk(chunk in raw, length in number)
562            return number
563   as language java name 'oracle.aurora.rdbms.DbmsJava.
564                          importRawChunk(byte[], int) return int';
565 
566   function import_text_chunk(chunk in varchar2, length in number)
567            return number
568   as language java name 'oracle.aurora.rdbms.DbmsJava.
569                          importTextChunk(oracle.sql.CHAR, int) return int';
570 
571   function end_import return number
572   as language java name 'oracle.aurora.rdbms.DbmsJava.endImport() return int';
573 
574 
575   -- call-specs can't have default params
576   procedure start_jmx_agent_(port VARCHAR2, ssl VARCHAR2, auth VARCHAR2)
577   as language java name
578   'oracle.aurora.rdbms.JMXAgent.startOJVMAgent(java.lang.String, java.lang.String, java.lang.String)';
579 
580   procedure start_jmx_agent(port VARCHAR2 default NULL,
581                             ssl  VARCHAR2 default NULL,
582                             auth VARCHAR2 default NULL) as
583     begin
584       -- call-specs can't have default params
585       start_jmx_agent_(port, ssl, auth);
586     end;
587 
588   -- Send command chunks to shell
589   procedure send_command (chunk long raw)
590   as language java name
591   'oracle.aurora.server.tools.shell.ShellStoredProc.receive_command (byte[])';
592 
593   -- Get reply chunks from shell
594   function get_reply return long raw
595   as language java name
596   'oracle.aurora.server.tools.shell.ShellStoredProc.get_reply () return byte[]';
597 
598   -- set a preference for the database
599   procedure set_preference(user varchar2,type varchar2, abspath varchar2,
600                            key varchar2, value varchar2)
601   as language java name
602   'java.util.prefs.OraclePreferences.DbmsSetPreference(
603         java.lang.String, java.lang.String, java.lang.String,
604         java.lang.String, java.lang.String)';
605 
606   -- turn system class loading on or off for current session
607   -- 0 is off, 1 is on
608   -- you need to be running as SYS to do this operation
609   procedure set_system_class_loading(flag number)
610   as
611   x number := 3;
612   begin
613     if flag = 1 then x := 2; end if;
614     x := option_controller(4, x);
615   exception
616   when others then
617     if sqlcode not in (-29549) then raise; end if;
618   end;
619 
620   -- reset instance duration flag for existence of the system property
621   -- definition table java$jvm$system$property$defs
622   -- if the table is created while the instance is up this procedure
623   -- must be called to allow the table to be used.  The table will be
624   -- used in any case after instance restart if the table exists at
625   -- that time
626   procedure reset_property_defs_table_flag
627   as x number := option_controller(5, 2); begin null; end;
628 
629   function full_ncomp_enabled return VARCHAR2
630   as
634   -- pragma exception_init(foo,-29558);
631   -- RHLEE: 9/7/2006 disable this for now
632   -- foo exception;
633   -- x varchar2(100) := ncomp_status_msg;
635   begin
636     -- if x = 'NComp status: DISABLED' then raise foo; end if;
637     return 'OK';
638   end;
639 
640   function getVersion return VARCHAR2 as
641   begin
642         return get_ojvm_property('oracle.jserver.version');
643   end;
644 
645   procedure set_runtime_exec_credentials(dbuser varchar2,
646                                          osuser varchar2,
647                                          ospass varchar2)
648   as
649     msg varchar2(100);
650   begin
651     msg := dbms_java_test.funcall('-setrtexeccreds', ' ',
652                                   dbuser,
653                                   osuser,
654                                   ospass);
655   end;
656 
657   procedure set_runtime_exec_credentials(osuser varchar2,
658                                          ospass varchar2)
659   as
660     msg varchar2(100);
661   begin
662     msg := dbms_java_test.funcall('-setrtexeccreds', ' ',
663                                   osuser,
664                                   ospass);
665   end;
666 
667  -- OJVM version of user feature tracking procedure
668   procedure dbms_feature_ojvm(ojvm_boolean    OUT NUMBER,
669                               aux_count       OUT NUMBER,
670                               ojvm_info       OUT CLOB) as
671 
672     TYPE data_arr is  varray(3) of INTEGER;
673     TYPE user_data is table of data_arr index by varchar(30);
674     ud user_data;
675     owner     varchar2(30);
676     otype     varchar2(30);
677     tmp_info  varchar2(1000);
678     cursor c1 is select owner, object_type
679                         from dba_objects where
680                         (object_type='JAVA CLASS' or
681                          object_type='JAVA RESOURCE' or
682                          object_type='JAVA SOURCE') and
683                         (owner != 'SYS' and owner != 'SYSTEM' and
684                          owner != 'EXFSYS' and owner != 'MDSYS'
685                          and owner != 'ORDSYS');
686   begin
687     aux_count := 0;
688     ojvm_boolean := 0;
689     tmp_info := NULL;
690     open c1;
691 
692     loop
693       fetch c1 into owner, otype;
694       exit when c1%NOTFOUND or c1%NOTFOUND is null;
695 
696 -- this block will initialize the assoc array the first time it
697 -- is used
698 
699       begin
700          if ud(owner).exists(1) then
701            null;
702          end if;
703       exception
704         WHEN NO_DATA_FOUND THEN
705           ud(owner) := data_arr(0,0,0);
706       end;
707 
708       case
709         when otype = 'JAVA CLASS'    then ud(owner)(1) := ud(owner)(1) + 1;
710         when otype = 'JAVA RESOURCE' then ud(owner)(2) := ud(owner)(2) + 1;
711         when otype = 'JAVA SOURCES'  then ud(owner)(3) := ud(owner)(3) + 1;
712         else null;
713       end case;
714     end loop;
715     close c1;
716 
717     owner := ud.FIRST;
718     tmp_info := 'Non-system users: ';
719     while owner is not null loop
720       aux_count := aux_count + ud(owner)(1) + ud(owner)(2) + ud(owner)(3);
721       tmp_info := tmp_info || owner || ' with ' ||
722                    ud(owner)(1) || ' classes, ' ||
723                    ud(owner)(2) || ' resources, ' ||
724                    ud(owner)(3) || ' sources. ';
725       owner := ud.NEXT(owner);
726     end loop;
727 
728      if aux_count > 0 then
729         ojvm_boolean := 1; -- we have user data;
730         ojvm_info := tmp_info;
731      end if;
732   end;
733 
734  -- OJVM version of system feature tracking procedure
735  --
736  -- This procedure is problematic in that we do not
737  -- know when someone adds classes to a product that
738  -- belongs to Oracle. This needs to be checked release to
739  -- release and != clauses will need to be added above to the
740  -- user query.
741 
742   procedure dbms_feature_system_ojvm(ojvm_boolean    OUT NUMBER,
743                                      aux_count       OUT NUMBER,
744                                      ojvm_info       OUT CLOB) as
745     TYPE data_arr is  varray(3) of INTEGER;
746     TYPE user_data is table of data_arr index by varchar(30);
747     owner     varchar2(30);
748     otype     varchar2(30);
749     tmp_info  varchar2(1000);
750     cursor c1 is select owner, object_type
751                         from dba_objects where
752                         (object_type='JAVA CLASS' or
753                          object_type='JAVA RESOURCE' or
754                          object_type='JAVA SOURCE') and
755                         (owner = 'SYS' or owner = 'SYSTEM' or
756                          owner = 'EXFSYS' or owner = 'MDSYS'
757                          or owner = 'ORDSYS');
758     ud user_data;
759   begin
760  -- this reflects the number schemas of Oracle products using java.
761  -- OJVM is always installed
762     ojvm_boolean := 1; -- always there.
763     open c1;
764     tmp_info := NULL;
765     aux_count := 0;
766     loop
767       fetch c1 into owner, otype;
768       exit when c1%NOTFOUND or c1%NOTFOUND is null;
769 -- this block will initialize the assoc array the first time it
770 -- is used
771 
772       begin
773         if ud(owner).exists(1) then
774            null;
775          end if;
776       exception
777         WHEN NO_DATA_FOUND THEN
778           ud(owner) := data_arr(0,0,0);
779       end;
780 
781       case
782       when otype = 'JAVA CLASS'    then ud(owner)(1) := ud(owner)(1) + 1;
783       when otype = 'JAVA RESOURCE' then ud(owner)(2) := ud(owner)(2) + 1;
784       when otype = 'JAVA SOURCES'  then ud(owner)(3) := ud(owner)(3) + 1;
785       else null;
786       end case;
787     end loop;
788     close c1;
789 
790     owner := ud.FIRST;
791     tmp_info := 'System users: ';
792     while owner is not null loop
793       aux_count := aux_count + ud(owner)(1) + ud(owner)(2) + ud(owner)(3);
794       tmp_info := tmp_info || owner || ' with ' ||
795                    ud(owner)(1) || ' classes, ' ||
796                    ud(owner)(2) || ' resources, ' ||
797                    ud(owner)(3) || ' sources. ';
798       owner := ud.NEXT(owner);
799     end loop;
800     ojvm_info := tmp_info;
801   end;
802 
803   function get_jdk_version return VARCHAR2 as
804   language java
805   name 'oracle.aurora.vm.CurrentJDK.version() return java.lang.String';
806 
807 end dbms_java;