shell script: grep multiple lines after pattern match

I have sql file containing lot of queries on different database table. I have to filter specific table queries.
Let say i need all queries of test1,test2,test3 along with four lines above it and sql queries can be multi lines or in single line.

Input file contains.

set INSERT_ID=1;
set TIMESTAMP=20100808
# at 233
# sql.session.value

INSERT INTO test1 (
column1,
column2,
column3,

VALUES

(
column1value,
column2value,
column3value
)

set INSERT_ID=21;
set TIMESTAMP=20100809
# at 2221
# sql.session.value

INSERT INTO notrequired (
column1

VALUES

(
column1value
)

set INSERT_ID=2;
set TIMESTAMP=20100809
# at 233
# sql.session.value

INSERT INTO test3 column1,column2 VALUES (column1value,column2value)

set INSERT_ID=2;
set TIMESTAMP=20100809
# at 233
# sql.session.value

UPDATE test1
SET column1=value,
column2=value,
column3=value
WHERE column3=value;

set INSERT_ID=11;
set TIMESTAMP=20100808
# at 2343
# sql.session.value

INSERT INTO test2 (
column1,
column2

VALUES

(
column1value,
column2value
)

I need to get all test1 and test2 table queries along with four above lines. I tried following but didn't work. Only grep first line of table.

shell] cat inputfile.sql | grep -wB4 "INSERT INTO test1" > outputfile.sql
shell] cat inputfile.sql | grep -wB4 "UPDATE test1" >> outputfile.sql
shell] cat inputfile.sql | grep -wB4 "INSERT INTO test2" >> outputfile.sql
shell] cat inputfile.sql | grep -wB4 "INSERT INTO test3" >> outputfile.sql

Output file should be look likes this,

set INSERT_ID=1;
set TIMESTAMP=20100808
# at 233
# sql.session.value

INSERT INTO test1 (
column1,
column2,
column3,

VALUES

(
column1value,
column2value,
column3value
)


set INSERT_ID=2;
set TIMESTAMP=20100809
# at 233
# sql.session.value

INSERT INTO test3 column1,column2 VALUES (column1value,column2value)


set INSERT_ID=2;
set TIMESTAMP=20100809
# at 233
# sql.session.value

UPDATE test1
SET column1=value,
column2=value,
column3=value
WHERE column3=value;

set INSERT_ID=11;
set TIMESTAMP=20100808
# at 2343
# sql.session.value

INSERT INTO test2 (
column1,
column2

VALUES

(
column1value,
column2value
)

Any help highly appreciated.

grep matches single lines, never multiple lines. You'll have to write a script. I suspect there's a one-liner in awk that can do this as well.

I'm having trouble seeing the pattern between your input and output files. You strip out some stuff between queries but not all.