UNIXで複数行のSQLを読み込む

UNIXで複数行のSQLを読み込む

現在、以下の.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}"

おすすめ記事