理解できないエラーがあります。問題は、シェルに入力したパラメーターがSQLデータベースに入力したパラメーターとは異なるタイプのようです。
理解を助けるために、各行にスペースで区切られた3つの重要な内容を持つdoc.lstファイルがあり、これらの内容をデータベース更新のパラメータとして使用したいと思います。各行を読み取り、各部分をパラメータとしてデータベースを更新します。
SQLクエリがあります。
UPDATE PE P
SET P.DATED='&1', P.DATEF='&1', P.CODA='&3', P.CODB='&2'
WHERE P.G_BAT=1;
COMMIT;
シェルは次のとおりです。
IFS=$'\n'
for i in $(cat $LST_HOME/doc.lst)
do
sqlplus64 $User/$Pass@$ORACLE_SID << EOF
P1=$(echo $i | awk '{print $1}')
P2=$(echo $i | awk '{print $2}')
P3=$(echo $i | awk '{print $3}')
@$SQL_HOME/update_p.sql $P1 $P2 $P3
commit;
exit
/data/jdk1.6.0_XX/bin/java -cp fr.bla.bla.bla
EOF
このエラーがあります。
SQL> SP2-0734: unknown command at the beggining of "P1=12/03/2..." - end of the line is ignored.
SQL> SP2-0042: unknown command "P2=0" - end of the line is ignored..
SQL> SP2-0042: unknown command "P3=FSL" - end of the line is ignored..
どこでどのように修正するのか本当にわかりません。
ベストアンサー1
sqlplusを呼び出す前に、シェル変数の設定を完了する必要があります。
IFS=$'\n'
for i in $(cat $LST_HOME/doc.lst)
do
P1=$(echo $i | awk '{print $1}')
P2=$(echo $i | awk '{print $2}')
P3=$(echo $i | awk '{print $3}')
sqlplus64 $UserCoribudg/$PassCoribudg@$ORACLE_SID << EOF
@$SQL_HOME/update_p.sql $P1 $P2 $P3
commit;
exit
EOF
/data/java_1.6_XX/bin/java -cp fr.bla.bla.bla
done
P1=whatever
有効なSQLコードではありません。- Java部分が更新された値を使用しているとします。