How To Execute an Operating System Command From Oracle Reports (Similar to the Builtin HOST in Oracl
How To Execute an Operating System Command From Oracle Reports (Similar to the Builtin HOST in Oracle)
Titleimage
Posted by Patrick Hamou on 2017:09:11 19:40:08
APPLIES TO:
Oracle Reports Developer - Version 9.0.4.0 to 11.1.1.4.0 [Release Oracle9i to 11g]
Information in this document applies to any platform.
GOAL
In Oracle Forms, the builtin HOST can be used to execute an indicated operating system command.
This note explains how to use Java in Oracle Reports to perform a similar function .
Caution
The sample programs in this article are provided for educational purposes only and are NOT supported by Oracle Support Services.
They have been tested internally, however, and work as documented.
We do not guarantee that they will work for you, so be sure to test them in your environment before relying on them.
FIX
1. Import the java class : java.lang.Runtime
a. Menu Program -> Import Java Classes ...
b. Enter 'java.lang.Runtime' in field 'Import Classes:'
c. Press <Import>
2. Use the function exec (to call this function, it is necessary to retrieve the "runtime" object)
Example:
function BeforeReport return boolean is
rt ORA_JAVA.JOBJECT;
proc ORA_JAVA.JOBJECT;
begin
rt := RUNTIME.GetRuntime();
proc := RUNTIME.exec(rt,'cmd /c set > e:\temp\getruntime.txt');
return (TRUE);
end;
This example will return the environment settings for a windows environment.
3. If you want to wait for the "OS command" completion, import the java class java.lang.Process and use the method waitfor (This is required if you want to read the file generated by the OS command) :
function BeforeReport return boolean is
rt ORA_JAVA.JOBJECT;
proc ORA_JAVA.JOBJECT;
l_rc NUMBER;
begin
rt := RUNTIME.GetRuntime();
proc := RUNTIME.exec(rt,'cmd /c set > e:\temp\getruntime.txt');
l_rc := PROCESS.waitfor (proc);
return (TRUE);
end;
4. Here below, an example for UNIX systems to retrieve the environment settings :
function BeforeReport return boolean is
rt ORA_JAVA.JOBJECT;
proc ORA_JAVA.JOBJECT;
cmdarray ORA_JAVA.JOBJECT;
l_temp_outfile VARCHAR2(2048);
l_rc NUMBER;
BEGIN
-- java.lang.Runtime and java.lang.Process must be imported.
begin
l_temp_outfile := SRW.CREATE_TEMPORARY_FILENAME;
rt := RUNTIME.GetRuntime();
-- Create a STRING ARRAY to pass to the method exec
cmdarray := ORA_JAVA.NEW_STRING_ARRAY(3);
ORA_JAVA.SET_STRING_ARRAY_ELEMENT (cmdarray, 0, '/bin/sh');
ORA_JAVA.SET_STRING_ARRAY_ELEMENT (cmdarray, 1, '-c');
ORA_JAVA.SET_STRING_ARRAY_ELEMENT (cmdarray, 2, 'env >' || l_temp_outfile || ' 2>&1');
proc := RUNTIME.exec(rt,cmdarray);
-- Wait for the process completion
l_rc := PROCESS.waitfor (proc);
exception
when others then null;
end;
return(TRUE);
end;
Posted by Patrick Hamou on 2017:09:11 19:40:08