0

Currently, I am reading few queries from the below .sql file

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

The code used to read the contents of the .sql file is being displayed below:

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 } 

The only disadvantage with this approach is that I can't read the SQL query if it is written in multi lines. It has to be on a single line to make it work.

I want to be more flexible while reading the queries. Is there any way that I can read the multi line SQL in Unix. Please help me out.

3
  • 2
    Is there a reason you can't just send the SQL to your SQL client (e. g. mysql < /path/to/myfile.sql)? Commented Nov 30, 2015 at 18:53
  • Please explain, what you want to do. Commented Nov 30, 2015 at 19:33
  • I just want to have that flexibility in reading those queries in multiple lines, its causing a havoc if I miss a single space in any of those lines ..I am using Teradata btw.. Commented Nov 30, 2015 at 20:08

1 Answer 1

0

A simple approach, assuming the ; is the last character of the line, would be something like

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

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.