Visit SQL statement recursively
This demo illustrate how to find out all kinds of SQL statements in a script quickly. Find out all SQL statements inside a PLSQL block/package/procedure/function; Find out nested subquery in a select/delete/update statement; Find out querys in a union select statement; Find out sub-queries in where clause, select list and etc.
Code in Java:
TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvoracle);
sqlparser.sqlfilename = args[0];
int ret = sqlparser.parse();
if (ret == 0){
for(int i=0;i<sqlparser.sqlstatements.size();i++){
iterateStmt(sqlparser.sqlstatements.get(i));
}
}else{
System.out.println(sqlparser.getErrormessage());
}
protected static void iterateStmt(TCustomSqlStatement stmt){
System.out.println(stmt.sqlstatementtype.toString());
for (int i=0;i<stmt.getStatements().size();i++){
iterateStmt(stmt.getStatements().get(i));
}
}
Download this demo: Java version, C# version
If you need to process all elements of a SQL statement, you may use visitor pattern to iterate all parse tree nodes just like this XML demo does.

