in reply to create a perl script for pattern matching

It is rather easy to recognize a start of an SQL-Statement, because very few words are used. Mostly Select, Update, Insert or Delete and very few other words.
The problem is to recognize the end of the Statement. Are there semicola (";") at the end?
The rest is as easy as shown by holli.
  • Comment on Re: create a perl script for pattern matching

Replies are listed 'Best First'.
Re^2: create a perl script for pattern matching
by VSarkiss (Monsignor) on Jul 01, 2005 at 14:20 UTC

    Slightly OT, but

    It is rather easy to recognize a start of an SQL-Statement
    Is it? Here are some random snippets from past code I've written.

    select max(prod_id) from product where effdt = (select max(effdt) from product)
    or
    insert order (prod_id, prod_cnt) select prod_id, count(*) from product group by prod_id
    How many statements was that? In fact it's two, but if you just count keywords, you'll get four.

    The point is not to underestimate the tasks that faces the OP. Trying to make it work by just matching keywords gets the wrong answer against normal, everyday SQL very easily. SQL has a definite grammar that's precise, but it's not easy to parse thru. Additional difficulty comes from recognizing all the vendor-specific extensions to the language, but let's not go into that. :-)