PLSQL 中SQL语言 执行 追踪

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestPlsql {

public static void main(String[] args) {
TestPlsql dataAccess = new TestPlsql();
try {
dataAccess.selectOracle();
} catch (Exception e) {
e.printStackTrace();
}
}

public void selectOracle() throws Exception {

/* ユーザ名 */
String user = "dbuser15";
/* パスワード */
String pass = "dbpass15";
/* サーバ名 */
String servername = "DTSOL180.develop.tdi.co.jp";
/* SID */
String sid = "STLDB";

Connection conn = null;
Statement stmt = null;
ResultSet rset = null;

try {
/* ドライバクラスのロード */
Class.forName("oracle.jdbc.driver.OracleDriver");

/* Connectionの作成 */
conn = DriverManager.getConnection("jdbc:oracle:thin:@" + servername + ":1521:" + sid, user, pass);

/* Statementの作成 */
stmt = conn.createStatement();
String sqlbuf = "" + " SELECT V$SQL_BIND_CAPTURE.SQL_ID                                                  "
+ "       ,dbms_lob.getlength(V$SQL.SQL_FULLTEXT)                     AS LENGTH       "
+ "       ,dbms_lob.substr(V$SQL.SQL_FULLTEXT,4000,1)                 AS SQL_TEXT01   "
+ "       ,dbms_lob.substr(V$SQL.SQL_FULLTEXT,8000,4001)              AS SQL_TEXT02   "
+ "       ,V$SQL_BIND_CAPTURE.NAME                                                    "
+ "       ,TO_CHAR( LAST_CAPTURED, 'YYYY/MM/DD') LAST_CAPTURED_DATE                   "
+ "       ,TO_CHAR( LAST_CAPTURED, 'HH24:MI:SS') LAST_CAPTURED_TIME                   "
+ "       ,VALUE_STRING                                                               "
+ "   FROM V$SQL_BIND_CAPTURE                                                         "
+ "   LEFT JOIN V$SQL ON V$SQL_BIND_CAPTURE.SQL_ID = V$SQL.SQL_ID                     "
+ "  WHERE V$SQL.SQL_ID IN(                                                           "
+ " SELECT V$SQL.SQL_ID                                                               "
+ "   FROM USER_OBJECTS                                                               "
+ "       ,V$SQL                                                                      "
+ "  WHERE OBJECT_NAME = 'E2B0250'                                                    "
+ "    and USER_OBJECTS.OBJECT_ID = V$SQL.PROGRAM_ID)                                 "
+ "  ORDER BY V$SQL_BIND_CAPTURE.SQL_ID                                               "
+ "          ,V$SQL_BIND_CAPTURE.NAME                                                 "
+ "          ,LAST_CAPTURED_DATE                                                      "
+ "          ,LAST_CAPTURED_TIME                                                      ";
/* Resultsetの作成 */
rset = stmt.executeQuery(sqlbuf);

/* 取得したデータを表示します。 */
String wkSqlId = "";
String wkLegth = "";
String wkSqlText01 = "";
String wkSqlText02 = "";
String wkName = "";
String wkDate = "";
String wkTime = "";
String wkVale = "";
String oldSqlId = "";
String oldSqlText = "";
String outputFileName = "c:/temp/test.txt";
File outputFile = new File(outputFileName);

        // 出力ストリームの生成
        FileOutputStream fos = new FileOutputStream(outputFile);
        OutputStreamWriter osw = new OutputStreamWriter(fos);
        PrintWriter pw = new PrintWriter(osw);
        // ファイルへの書き込み
while (rset.next()) {
wkSqlId = rset.getString(1);
wkLegth = rset.getString(2);
wkSqlText01 = rset.getString(3);
wkSqlText02 = rset.getString(4);
wkName = rset.getString(5);
wkDate = rset.getString(6);
wkTime = rset.getString(7);
wkVale = rset.getString(8);

if ("".equals(oldSqlId)) {
oldSqlId = wkSqlId;
if (wkSqlText02 != null ){
oldSqlText = wkSqlText01 + wkSqlText02;
} else {
oldSqlText = wkSqlText01;
}
if (wkVale == null ){
oldSqlText = oldSqlText.replaceAll(wkName, "null");
}else{
oldSqlText = oldSqlText.replaceAll(wkName, "'" + wkVale + "'");
}
} else if (oldSqlId.equals(wkSqlId)) {
if (wkVale == null ){
oldSqlText = oldSqlText.replaceAll(wkName, "null");
}else{
oldSqlText = oldSqlText.replaceAll(wkName, "'" + wkVale + "'");
}
} else {
pw.println(oldSqlId + "⇒" + wkDate + " " + wkTime + "⇒" + oldSqlText);

oldSqlId = wkSqlId;

if (wkSqlText02 != null ){
oldSqlText = wkSqlText01 + wkSqlText02;
} else {
oldSqlText = wkSqlText01;
}

if (wkVale == null ){
oldSqlText = oldSqlText.replaceAll(wkName, "null");
}else{
oldSqlText = oldSqlText.replaceAll(wkName, "'" + wkVale + "'");
}
}

}
        // 後始末
        pw.close();

} catch (ClassNotFoundException e) {
throw e;
} catch (SQLException e) {
throw e;
} catch (Exception e) {
throw e;
} finally {
/* クローズ処理 */
if (conn != null) {
conn.close();
conn = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
if (rset != null) {
rset.close();
rset = null;
}
}
}

private static boolean checkBeforeWritefile(File file) {
if (file.exists()) {
if (file.isFile() && file.canWrite()) {
return true;
}
}

return false;
}

}

你可能感兴趣的:(plsql)