I am trying to execute an external command procedure from Oracle. What I have so far is;
Oracle Procedure;
CREATE OR REPLACE PROCEDURE DO_HOST_COMMAND
(
HOST_COMMAND IN VARCHAR2
, ARGUMENT_LIST IN VARCHAR2
, ARGUMENT_COUNT IN NUMBER
, DELIMITER IN VARCHAR2
) AS
JOB_ID VARCHAR2(100) := 'myjob_'||TO_CHAR(SYSTIMESTAMP,'YYYYMMDDHH24MISSFF6');
CURRENT_ARGUMENT_COUNT NUMBER;
CURRENT_ARGUMENT VARCHAR2(32767);
BEGIN
DBMS_SCHEDULER.CREATE_JOB (JOB_NAME => JOB_ID,
JOB_TYPE => 'executable',
JOB_ACTION => 'c:\windows\system32\cmd.exe',
NUMBER_OF_ARGUMENTS => ARGUMENT_COUNT + 1,
AUTO_DROP => TRUE);
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE (JOB_ID, 1, HOST_COMMAND);
FOR CURRENT_ARGUMENT_COUNT IN 1..ARGUMENT_COUNT
LOOP
CURRENT_ARGUMENT := GET_DELIMITED_ELEMENT(ARGUMENT_LIST,DELIMITER,CURRENT_ARGUMENT_COUNT);
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE (JOB_ID, CURRENT_ARGUMENT_COUNT + 1, CURRENT_ARGUMENT);
END LOOP;
DBMS_SCHEDULER.RUN_JOB (JOB_ID);
END DO_HOST_COMMAND;
Windows command procedure;
c:
cd \Temp
echo in test.cmd > test.log
copy %1 %2
SQL command to run this;
exec do_host_command('c:\temp\test.cmd','test1.txt|test2.txt',2,'|');
The result is;
PL/SQL procedure successfully completed.
However nothing occurs. When I run;
select * from user_scheduler_job_run_details where trunc(log_date) = trunc(sysdate);
It says the job succeeded. I looked in the alert log and the traces files and can find nothing. I have changed the permissions of the c:\temp folder to everyone full access.
Not sure where to look to find the problem. What additional troubleshooting should I do?
This is running in Oracle 12c R2 on Windows 2016.