doc1.lstとdoc 2.lstという2つの文書があり、各行の内容を取得してSQLクエリのパラメータとして使用しようとしています。
似たようなことをしましたが、修正してください。
file=doc1.lst
while read line
do
p1=$line;
file=doc2.lst
while read line
do
p2=$line;
sqlplus64 $User/$Pass@$ORACLE_SID << EOF2
@update.sql p1 p2
done < echo "Ok"
done < echo "Ok"
EOF2
問題は、各行の値を取得し、sqlplusクエリに示されているようにテーブルを更新できるようにパラメータ(p1とp2)として提供したいということです。
より良い理解のために、私のファイルdoc1.lstは次のようになります。
AAA
ABC
EDF
私のファイルdoc2.lst:
30
10
30
この値でテーブルを更新したいです。
ベストアンサー1
私が理解したのは(<<EOF2
最後の部分が何であるかは完全にはわかりません)、最終結果は次のように入力することですsqlplus64
。
@update.sql AAA 30
@update.sql ABC 10
@update.sql EDF 30
このコンテンツを作成するには、2つのファイルの内容を繰り返すのではなく、2つのファイルを結合するだけです。paste
両方のファイルで()を使用するpaste doc1.lst doc2.lst
と、
AAA 30
ABC 10
EDF 30
(paste
デフォルトではタブで接続されています)。 Givesを使用してpaste -d ' ' doc1.lst doc2.lst
区切り記号を変更する
AAA 30
ABC 10
EDF 30
次にプレフィックスとして追加する必要があります。各行の先頭()を接頭辞に置き換えます@update.sql
。sed
^
paste -d ' ' doc1.lst doc2.lst | sed 's/^/@update.sql /'
必要な結果を作成してください。
その後、一度に入力できますsqlplus64
。
paste -d ' ' doc1.lst doc2.lst | sed 's/^/@update.sql /' | sqlplus64 $User/$Pass@$ORACLE_SID
exit
スクリプトの最後に入力する必要がある場合sqlplus64
:
(paste -d ' ' doc1.lst doc2.lst | sed 's/^/@update.sql /'; echo exit) | sqlplus64 $User/$Pass@$ORACLE_SID
実際に1行ずつ実行したい場合は、while read
結果の各行を入力してくださいsqlplus64
。