我正在使用unix shell KSH腳本來做一些表清理。 我有一個文件「partner.txt」 5000線這樣需要從Unix shell腳本傳遞字符串到SQL查詢
>cat partner.txt
aaa0000
aaa0001
aaa0002
...
...
aaa5000
使用這個文件,我應該打掃幾桌與匹配,說的合作伙伴協議。 所以我構建的格式的合作伙伴名單串,我可以用「IN」子句中使用SQL語句(SELECT * FROM選項卡凡partner_list夥伴)
('aaa0000',
'aaa0001','aaa0002',...,'aaa0010',
'aaa0011','aaa0012',...,'aaa0020',
...
'aaa4990','aaa4991',...,'aaa5000')
我指定的字符串partner_list這樣的變量。
export BO="("
export BC=")"
export BQ="('"
export QC="','"
export QB="')"
export C=","
export CE=","'\n'
export QCE="',"'\n'"'"
partnerListLine=${BO}
while read partnerline;
do
if [ `expr ${counter} % 10` -eq 0 ]
then
partnerListLine=${partnerListLine}${partnerline}${CE}
elif [ ${counter} -lt ${numOfObsoletePartner} ]
then
partnerListLine=${partnerListLine}${partnerline}${C}
fi
counter=`expr ${counter} + 1`
done < partner.txt
partnerListLine=${partnerListLine}${partnerline}${BC}
然後我用這合作伙伴名單,以獲取像
SQL_agreement='select distinct a.agreement from partner_agreement_map a where a.partner in ${partner_list} order by agreement asc;'
我需要換行字符在我的合作伙伴名單,因爲我是用sqlplus並遇到SP2-0027我的協議列表:輸入是過長(> 2499個字符) 我N個合作伙伴後追加下面我的合作伙伴名單字符串添加換行符
CE=","'\n'
這工作得很好當我在腳本中直接使用sqlplus時。
但是當我嘗試將這個partner_list字符串作爲參數傳遞給一個sql腳本時,它在查詢中顯示'\ n'。
這是我打電話給我的SQL腳本,並傳遞參數
sqlplus -s ${REFERENCE_DB_USER}/${REFERENCE_DB_PASS}@${DATABASE_INSTANCE} << !!
set serveroutput on size 10000;
set feedback off;
set verify off;
set echo off;
set term off;
set pagesize 0;
SET linesize 1000;
SET TRIMSPOOL ON;
spool 1_del_agreement_spool_$$.lst;
@1_del_agreement.sql ${partner_list};
spool off;
exit;
/
!!
這是我的假脫機文件
>cat 1_del_agreement_spool_18165.lst <
select distinct a.agreement from partner_agreement_map a where a.partner in ('aaa0000',\n'aaa0001','aaa0002','aaa0003',...'aaa0010',\n'aaa0011'...) order by agreement asc
*
ERROR at line 1:
ORA-00907: missing right parenthesis
我怎樣才能保持換行符時,我的參數傳遞到SQL腳本,並沒有將它替換爲'\ n'? 我試過ANSI-C引用,但失敗了。
請讓我知道如果你想,如果你正在使用bash所需要的外殼或SQL腳本
注意:您不應該在此文檔中使用'!!',因爲這裏有一個shell命令同名(回憶最後的命令)。改用'EOF'。 – 2015-02-24 11:07:00
編輯問題並向我們顯示爲'partner_list'分配值的代碼。 – 2015-02-24 11:07:33
我已添加片段。我還將單引號添加到合作伙伴列表中。我正在循環該文件,並根據需要添加逗號,qoutes和換行符。 – pradipti 2015-02-24 11:28:21