doc1.lst와 doc 2.lst라는 두 개의 문서가 있고 각 행의 내용을 가져와 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
이 콘텐츠를 생성하려면 두 파일의 콘텐츠를 반복하는 대신 두 파일을 결합하면 됩니다. 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
실제로 한 줄씩 실행하고 싶다면 while read
결과의 각 줄을 입력하면 됩니다 sqlplus64
.