Question

Please suppose I have an Oracle Stored Procedure with this signature:

CREATE OR REPLACE PROCEDURE MY_PROC (
   INPUT01        IN     VARCHAR2,
   INPUT02        IN     VARCHAR2,
   INPUT03        IN     VARCHAR2,
   INPUT04        IN     VARCHAR2,
   OUTPUT01       OUT    VARCHAR2,
   OUTPUT02       OUT    VARCHAR2,
   OUTPUT03       OUT    VARCHAR2
)

I need to write a ksh script which invokes the MY_PROC stored procedure with the following four input:

./my_ksh.ksh input01 input02 input03 input04

If output01 = 0 (of the stored procedure), then I need to execute the following SELECT statement:

SELECT COLUMN01||CHR(9)||COLUMN03 FROM MY_TABLE WHERE MY_COLUMN = INPUT01;

spooling the result set in a file called "MYFILE_001-INPUT01-YYYYMMDD.csv"

where YYYYMMDD is sysdate... help! If you can!

Was it helpful?

Solution

Save this as my_ksh.ksh

USER=your_user
PASS=your_pass
DB=your_db


PARAM1=$1
PARAM2=$2
PARAM3=$3
PARAM4=$4

OUTPUT_SPOOL_FILE="MYFILE_001${PARAM1}-`date +%Y%m%d`.csv"

sqlplus -S ${USER}/${PASS}@${DB} << ! >> $OUTPUT_SPOOL_FILE
SET SERVEROUTPUT ON SIZE UNLIMITED;

VAR EXITCODE NUMBER;
VAR OUTPUT01 NUMBER;
VAR OUTPUT03 NUMBER;
VAR OUTPUT03 NUMBER;

sqlplus_rc refcursor;


DECLARE
   l_output01 VARCHAR2(100);
   l_output02 VARCHAR2(100);
   l_output03 VARCHAR2(100);

   l_input01 VARCHAR2(100) := '$PARAM1';
   l_input02 VARCHAR2(100) := '$PARAM2';
   l_input03 VARCHAR2(100) := '$PARAM3';
   l_input04 VARCHAR2(100) := '$PARAM4';

   rc  sys_refcursor;

BEGIN
   MY_PROC('$PARAM1','$PARAM2','$PARAM3','$PARAM4',l_output01,l_output02,l_output03);

   IF(l_output01 = 0) THEN
     OPEN rc FOR 'SELECT COLUMN01||CHR(9)||COLUMN03 FROM MY_TABLE WHERE MY_COLUMN = :INPUT01' USING l_input01;

     :sqlplus_rc := rc;
   END IF;
   :EXITCODE := SQLCODE;
EXCEPTION
WHEN OTHERS THEN
   DBMS_OUTPUT.PUT_LINE(SQLERRM);
   :EXITCODE := SQLCODE;
END;
/

print sqlplus_rc

exit :EXITCODE
!
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top