CREATE OR REPLACE PACKAGE osutil IS PROCEDURE RunOsCmdReg(cmdin IN VARCHAR2, cmdoutput OUT VARCHAR2); -- Purpose: External procedure to run an OS command -- and capture the results. -- Input Arguments: -- cmdin - the OS command to run -- Output Arguments: -- cmdoutput - output value of OS command PROCEDURE RunOsCmd(acmd IN VARCHAR2); -- Purpose: Wrapper used to run the external -- procedure, "RunOsCmd".The dbms_output package is -- used to print the results. -- Input Arguments: -- acmd - an OS command end osutil; / show errors CREATE OR REPLACE PACKAGE BODY osutil IS PROCEDURE RunOsCmdReg(cmdin IN VARCHAR2, cmdoutput OUT VARCHAR2) IS EXTERNAL NAME "RunOsCmd" LIBRARY libosint WITH CONTEXT PARAMETERS (CONTEXT, cmdin STRING, cmdin INDICATOR SHORT, cmdin LENGTH INT, cmdoutput STRING, cmdoutput INDICATOR SHORT, cmdoutput LENGTH INT); PROCEDURE RunOsCmd(acmd IN VARCHAR2) IS cmd_out VARCHAR2(32767); -- output of OS command i INTEGER; -- counter variabl j INTEGER; -- counter variable len INTEGER; -- length of command output cnl CHAR(1) := chr(10); -- "newline" character BEGIN dbms_output.enable(32767); -- enable a large output buffer RunOsCmdReg(acmd, cmd_out); -- call the external procedure IF (cmd_out IS NULL) THEN dbms_output.put_line('ERROR, bad command or no output returned...'); ELSE -- output one line at a time len := length(cmd_out); i := 1; -- start at first char j := instr(cmd_out,cnl,i,1); -- find first newline char LOOP dbms_output.put_line(substr(cmd_out,i,j-i)); -- print the line IF ( j = len ) THEN EXIT; END IF; i := j + 1; -- start after last newline j := instr(cmd_out,cnl,i,1); -- find the next newline END LOOP; END IF; end RunOsCmd; END osutil; / show error