在 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 查询是多行编写的,我将无法读取它。它必须在一行上才能工作。

我希望在阅读查询时更加灵活。有什么方法可以在 Unix 中读取多行 SQL。请帮帮我。

答案1

一个简单的方法,假设;是该行的最后一个字符,就像

sqlcommand=""
while read -r line; do
        sqlline=${line%%--*}
        sqlcommand+="${sqlline}"
        if [[ "${sqlline}" = *\;* ]]; then
                break
        fi
done < input

echo "${sqlcommand}"

相关内容