2
我需要爲我的應用程序解析查詢的執行計劃並從中提取數據。雖然這個答案JDBC Oracle - Fetch explain plan for query幫助我通過jdbc獲取文本執行計劃,但由於查詢是運行時參數,因此無法解析文本輸出。下面提到的示例查詢返回「Sql Developer」中的xml,但不通過jdbc。我正在使用Oracle 11g XE和ojdbc6.jar驅動程序。爲什麼這個查詢不能通過jdbc api工作?任何幫助將不勝感激。如何通過jdbc獲取Oracle執行計劃xml
說明計劃 SET STATEMENT_ID = '123' FOR SELECT * FROM作業其中ROWNUM < 3以便通過JOB_ID降序
SELECT dbms_xplan.build_plan_xml(statement_id => '123')AS XPLAN FROM雙重;
下面是我的Java代碼:
Driver d = (Driver) Class.forName("oracle.jdbc.OracleDriver").newInstance();
Connection conn = d.connect("jdbc:oracle:thin:username/[email protected]//localhost:1521/XE", new Properties());
Statement statement1 = conn.createStatement();
statement1.execute("explain plan set STATEMENT_ID = '"+ id + "' for " + query);
statement1.executeQuery("select dbms_xplan.build_plan_xml(statement_id => '"+ id + "') AS XPLAN FROM dual");
ResultSet resultSet = statement1.getResultSet();
while (resultSet.next()) {
executionPlan = resultSet.getSQLXML(1).getString();
}
使用getString(1)返回一個空值,而使用to_clob給出以下呃ror在jdbc和Sql Developer<![CDATA [ORA-00904:「OTHER_XML」:無效標識符]]> –
Snoopy
但是,該錯誤消息意味着,它運行基本上工作和其他錯誤發生dbms_xplan.build_plan_xml –
@ user812236,可以顯示您在嘗試TO_CLOB方法時使用的確切語句嗎? 'select to_clob(dbms_xplan.build_plan_xml(statement_id =>'123'))AS XPLAN FROM dual'在SQL Developer中對我很好。 –