【问题标题】:Korn Shell Scripting with Oracle [closed]使用 Oracle 编写 Korn Shell 脚本 [关闭]
【发布时间】:2014-02-11 08:21:11
【问题描述】:

请假设我有一个带有此签名的 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...帮助!如果可以的话!

【问题讨论】:

    标签: oracle scripting ksh


    【解决方案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
    !
    

    【讨论】:

    • USER=myuser PASS=mypwd$1 DB="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MYSECRETHOST)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=MY03SECR))) "
    • 无法解析 tnsnames :( 它包含括号...
    • 在您的主目录中有一个 .tnsnames.ora 作为隐藏文件并添加此条目。
    • 那么括号之间的描述是正确的,但是在ksh中没有正确识别...
    • ORA-12154: TNS: 无法解析指定的连接标识符
    猜你喜欢
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    相关资源
    最近更新 更多