六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 79|回复: 0

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

[复制链接]

升级  17.67%

75

主题

75

主题

75

主题

举人

Rank: 3Rank: 3

积分
253
 楼主| 发表于 2013-1-13 18:58:24 | 显示全部楼层 |阅读模式
之前用的oracle大型数据库,写的sql都是依据oracle的。移动端部分用的不能是oracle数据库,只能采用小型数据库,现场采用db2。
        db2大小只能论k为单位,很多基本的sql语法都不支持,尤其多重子查询就不支持,做试验报告的阀值就必须得用这个子查询,没有部分只好将多重子查询提出sql,单独执行。
        提取多重子查询的方法倒是不复杂,就是对sql语句循环处理,判断是否含有多个select关键字,如果有从字符串最后一个select处理,截取sql语句,执行,然后将查询的结果替换原先的sql语句,直到循环判断sql语句中只有一个select关键字。
         关键部分的代码:
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee;">        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;
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表