現在、以下の.sqlファイルからいくつかのクエリを読み込んでいます。
--SOURCE TABLE NAME
--SOURCE QUERY
SEL COL1, COL2, COL3, COL4,
COL5, COL6, COL7 WHERE COL5 = '2015-11-04 16:24:00.000000' FROM SOURCE TABLE;
--TARGET TABLE NAME
--TARGET QUERY
SEL COLUMN1, COLUMN2, COLUMN3, COLUMN4,
COLUMN5, COLUMN6, COLUMN7 FROM TARGET TABLE;
0,1
.sqlファイルの内容を読み取るコードは次のとおりです。
validate() {
queryNum=0
while true
do
((queryNum++))
read tableName
read comment
read sourceQuery
read blankLine
read tableName
read comment
read targetQuery
read primaryKeyCols || break
read blankLine
exQuery "$sourceQuery" sourceResults.txt
exQuery "$targetQuery" targetResults.txt
done < $1
}
このアプローチの唯一の欠点は、SQLクエリが複数行にわたって書き込まれると読み取れないことです。動作するには1行にする必要があります。
クエリを読むときにもっと柔軟に対処したいと思います。 Unixで複数行のSQLを読み取る方法はありますか?助けてください。
答え1
;
行の最後の文字であると仮定する簡単な方法は次のとおりです。
sqlcommand=""
while read -r line; do
sqlline=${line%%--*}
sqlcommand+="${sqlline}"
if [[ "${sqlline}" = *\;* ]]; then
break
fi
done < input
echo "${sqlcommand}"