Shell-Script

shell scipt 中 select 語句的文件輸入

  • April 18, 2019

我有一個文本文件,其中包含 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

請讓我知道如何在突出顯示的部分使用文本文件作為輸入。

首先,將文件讀入一個數組。

這是針對在一行中包含值的文件:

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

未經測試,因此可能存在拼寫錯誤等。如果您有問題,請發表評論。

引用自:https://unix.stackexchange.com/questions/353752