Shell scipt의 select 문에 대한 파일 입력

Shell scipt의 select 문에 대한 파일 입력

Select 문에 대한 입력이 포함된 텍스트 파일이 있습니다.

sqlplus -s $USERNAME/$PASSWORD@$HOST<<EOF

spool $DIRECTORY/UPDATE.xls

select acc,cr,dr from count
where acc in ***$DIRECTORY/acc.txt***;

spool off;
exit
EOF

강조 표시된 부분의 입력으로 텍스트 파일을 사용하는 방법을 알려주십시오.

답변1

먼저 파일을 배열로 읽어옵니다.

다음은 한 줄의 값이 포함된 파일입니다.

read -ar values < "$DIRECTORY"/acc.txt

여러 줄 파일의 경우 루프를 사용합니다(한 줄에 하나의 값).

while read -r v; do
    values+=("$v")
done < <(cat "$DIRECTORY"/acc.txt)

Archemar의 의견에 따르면 SQL 구문은 var in ( "value1", "value2", ... )이므로 일부 텍스트 처리가 필요합니다.

첫 번째 인용문:

for i in "${values[@]}"; do quoted_values+=(\""$i"\"); done

둘째, 쉼표와 공백으로 구분합니다.

limit="${#quoted_values[@]}"
for ((i=0; i<"$limit"; i++ )); do
    values_string="$values_string""${quoted_values[$i]}"
    ((limit-i-1)) && values_string="$values_string",
    values_string="$values_string"" "
done

여기 문서에는 값 목록 주위에 괄호가 표시됩니다.

sqlplus -s "$USERNAME"/"$PASSWORD"@"$HOST"<<EOF

spool "$DIRECTORY"/UPDATE.xls

select acc,cr,dr from count
where acc in ( "$values_string" );

spool off;
exit
EOF

테스트를 거치지 않아 오타 등이 있을 수 있습니다. 질문이 있으시면 댓글을 달아주세요.

답변2

텍스트 파일에서 선택하는 매우 간단한 방법은 다음과 같습니다.

cat ${DIRECTORY}/UPDATE.txt |

while read acc_id ; do

       select acc,cr,dr from count
       where acc in ${acc_id};

done

그게 다야.

관련 정보