多重子查询提取每次子查询的SQL语句

多重子查询提取每次子查询的SQL语句

        之前用的oracle大型数据库,写的sql都是依据oracle的。移动端部分用的不能是oracle数据库,只能采用小型数据库,现场采用db2。
        db2大小只能论k为单位,很多基本的sql语法都不支持,尤其多重子查询就不支持,做试验报告的阀值就必须得用这个子查询,没有部分只好将多重子查询提出sql,单独执行。
        提取多重子查询的方法倒是不复杂,就是对sql语句循环处理,判断是否含有多个select关键字,如果有从字符串最后一个select处理,截取sql语句,执行,然后将查询的结果替换原先的sql语句,直到循环判断sql语句中只有一个select关键字。
         关键部分的代码:
         int  lastSelectNo  =   0 ;
        
int  size  =   0 ;
        
        
if  (sqlString.split( " select " ).length  -   1   >   0 )
            size 
=  sqlString.split( " select " ).length  -   1 ;
        
else   if  (sqlString.split( " SELECT " ).length  -   1   >   0 )
            size 
=  sqlString.split( " SELECT " ).length  -   1 ;

        String[] sql 
=   new  String[size];

        
while  (isHaveTwoSelect(sqlString))
        
{
            lastSelectNo 
= sqlString.lastIndexOf("select");
            
if (lastSelectNo == 0)
                lastSelectNo 
= sqlString.lastIndexOf("SELECT");

            
char beforeLast = sqlString.charAt(lastSelectNo - 1);
            
if (beforeLast == '(')
            
{
                
int k = 5;
                String string 
= sqlString.substring(lastSelectNo).substring(0, k);
                
while (!IsMatching(string))
                
{
                    k
++;
                    string 
= sqlString.substring(lastSelectNo).substring(0, k);
                }

                sql[size 
- 1= string.substring(0, k - 1);
                sqlString 
= replace(sqlString, sql[size - 1].toString(), "sql[" + (size - 1+ "]");
                size
--;
            }
//if(befor            
        }

        sql[
0 =  sqlString;

      问题是:对于select关键字的处理,目前只知道全是小写select或是全是大写SELECT,实际中select关键字这个不考虑大小写限制,我这边还尚未进行校验,一是比较麻烦二是尚未发现好的方法,目前就是对select关键字依次判断是否是s e l e c t几个字符 ,不考虑大小写。
     大家如果有好的处理select关键字方法,欢迎得道你的支持。

你可能感兴趣的:(多重子查询提取每次子查询的SQL语句)