我正在使用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