多重子查询提取每次子查询的SQL语句
之前用的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;">http://www.agoit.com/Images/OutliningIndicators/None.gif int lastSelectNo = 0;
http://www.agoit.com/Images/OutliningIndicators/None.gif int size = 0;
http://www.agoit.com/Images/OutliningIndicators/None.gif
http://www.agoit.com/Images/OutliningIndicators/None.gif if (sqlString.split("select").length - 1 > 0)
http://www.agoit.com/Images/OutliningIndicators/None.gif size = sqlString.split("select").length - 1;
http://www.agoit.com/Images/OutliningIndicators/None.gif else if (sqlString.split("SELECT").length - 1 > 0)
http://www.agoit.com/Images/OutliningIndicators/None.gif size = sqlString.split("SELECT").length - 1;
http://www.agoit.com/Images/OutliningIndicators/None.gif
http://www.agoit.com/Images/OutliningIndicators/None.gif String[] sql = new String;
http://www.agoit.com/Images/OutliningIndicators/None.gif
http://www.agoit.com/Images/OutliningIndicators/None.gif while (isHaveTwoSelect(sqlString))
http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedBlock.gif http://www.blogjava.net/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif lastSelectNo = sqlString.lastIndexOf("select");
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif if (lastSelectNo == 0)
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif lastSelectNo = sqlString.lastIndexOf("SELECT");
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif char beforeLast = sqlString.charAt(lastSelectNo - 1);
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif if (beforeLast == '(')
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedSubBlock.gif http://www.blogjava.net/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif int k = 5;
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif String string = sqlString.substring(lastSelectNo).substring(0, k);
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif while (!IsMatching(string))
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedSubBlock.gif http://www.blogjava.net/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif k++;
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif string = sqlString.substring(lastSelectNo).substring(0, k);
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif sql- 1] = string.substring(0, k - 1);
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif sqlString = replace(sqlString, sql- 1].toString(), "sql[" + (size - 1) + "]");
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif size--;
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }//if(befor
http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockEnd.gif }
http://www.agoit.com/Images/OutliningIndicators/None.gif sql[0] = sqlString;
页:
[1]