Lendo Multi Line SQL no UNIX

0

Atualmente, estou lendo algumas consultas do arquivo .sql abaixo

--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

O código usado para ler o conteúdo do arquivo .sql está sendo exibido abaixo:

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  
}  

A única desvantagem dessa abordagem é que não consigo ler a consulta SQL se ela estiver escrita em várias linhas. Tem que estar em uma única linha para fazê-lo funcionar.

Eu quero ser mais flexível ao ler as consultas. Existe alguma maneira que eu possa ler o multi line SQL no Unix. Por favor me ajude.

    
por user2969653 30.11.2015 / 19:40

1 resposta

0

Uma abordagem simples, assumindo que ; é o último caractere da linha, seria algo como

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

echo "${sqlcommand}"
    
por 30.11.2015 / 21:55

Tags