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,
366 newline_only_method,
367 newline_only_bindings,
368 maximum_line_segment_length,
369 flags,
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
494 PROCEDURE finalize_output_to_file (id VARCHAR2) as
495 language java name
496 'oracle.aurora.rdbms.DbmsJava.finalizeOutputToFile(java.lang.String)';
497
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
631 -- RHLEE: 9/7/2006 disable this for now
632 -- foo exception;
633 -- x varchar2(100) := ncomp_status_msg;
634 -- pragma exception_init(foo,-29558);
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;