目前,我正在从下面的 .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 查询是多行编写的,我将无法读取它。它必须在一行上才能工作。
我希望在阅读查询时更加灵活。有什么方法可以在 Unix 中读取多行 SQL。请帮帮我。
答案1
一个简单的方法,假设;
是该行的最后一个字符,就像
sqlcommand=""
while read -r line; do
sqlline=${line%%--*}
sqlcommand+="${sqlline}"
if [[ "${sqlline}" = *\;* ]]; then
break
fi
done < input
echo "${sqlcommand}"