Oracle中查询调用函数接口,会存在各种性能问题。很多时候,公司经理或领导都要求我们对这些调接口函数的SQL进行优化,那么要怎么找出这些SQL呢?因为我们公司的业务都是写在package,最少几千行的代码,几百个package,自己用肉眼去看是非常费劲的,所以自己用JAVA写了个小程序,将这些SQL抓取出来。
FindFuncSQL.java:
package utils.oracle;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 文件名称: FindFuncSQL.java
* 编写人: yh.zeng
* 编写时间: 17-10-14 下午7:33
* 文件描述: 抓取Oracle Package包中调用函数查询的Select SQL,将这些SQL输出到一个文件中
* 例如:
* select * from test
* where name = v_name and test1_package.isHasPriv(v_name) = 'Y';
*/
public class FindFuncSQL
{
public static void main(String args[]) throws IOException {
System.out.println("程序执行中...");
File resultFile = new File("D:\\sql\\result.txt");
FileWriter writer = new FileWriter(resultFile, true);
File dir = new File("D:\\sql");
if(!dir.exists()){
dir.mkdirs();
}
File files[] = dir.listFiles(new FileFilter(){
@Override
public boolean accept(File file) {
if(file.getName().endsWith(".sql") || file.getName().endsWith(".SQL")){
return true;
}else{
return false;
}
}
});
for(int i = 0; i < files.length; i++){
int selectIndex = -1; //select index
int endIndex = -1; //select SQL的; index
int commentIndex = -1; //--行注释的index
int l_BlockCommentIndex = -1; // /* 开始的段注释的index
int r_BlockCommentIndex = -1; // */ 结束的段注释的index
boolean blockCommentClose = true; //段注释是否关闭
StringBuffer sqlBuf = new StringBuffer(); //select SQL
StringBuffer blockSQLBuf = new StringBuffer(); //一段完整的SQL
boolean hashPackage = false; //select SQL是否调用package包
String packageName = null; //包名
String precedureName = null; //存储过程名或方法名
BufferedReader br = new BufferedReader(new FileReader(files[i]));
String line = null;
boolean isFirst = true;
boolean isFirstS