如何通过jdbc获取Oracle执行计划xml

时间:2011-08-31 13:27:53

标签: oracle jdbc sql-execution-plan

我需要解析查询的执行计划,并为我的应用程序提取数据。虽然这个答案JDBC Oracle - Fetch explain plan for query帮助我通过jdbc获取文本执行计划,但由于查询是运行时参数,因此无法解析文本输出。下面提到的示例查询返回“Sql Developer”中的xml,但不是通过jdbc。我正在使用Oracle 11g XE和ojdbc6.jar驱动程序。为什么这个查询无法通过jdbc api工作?任何帮助将不胜感激。

解释计划 SET STATEMENT_ID ='123'FOR 从rownum<的工作中选择* 3 by job_id desc

SELECT dbms_xplan.build_plan_xml(statement_id =>'123')AS XPLAN FROM dual;

以下是我的java代码:

    Driver d = (Driver) Class.forName("oracle.jdbc.OracleDriver").newInstance();
    Connection conn = d.connect("jdbc:oracle:thin:username/password@//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();
    }

1 个答案:

答案 0 :(得分:2)

我认为结果不会作为“真正的”JDBC XML类型返回。

尝试

resultSet.getString(1)

代替

如果这不起作用,请尝试将结果转换为clob:

  executeQuery("select to_clob(dbms_xplan.build_plan_xml(....

这肯定会要求你使用getString(1)而不是getSQLXML()