请假设我有一个带有此签名的Oracle存储过程:
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
)
我需要编写一个ksh脚本,该脚本使用以下四个输入调用MY_PROC存储过程:
./my_ksh.ksh input01 input02 input03 input04
如果output01 = 0(存储过程),那么我需要执行以下SELECT语句:
SELECT COLUMN01||CHR(9)||COLUMN03 FROM MY_TABLE WHERE MY_COLUMN = INPUT01;
在名为“MYFILE_001-INPUT01-YYYYMMDD.csv”的文件中假脱机结果集
其中YYYYMMDD是sysdate ...帮助!如果可以的话!
答案 0 :(得分:1)
将其另存为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
!