Как получить план выполнения Oracle XML через JDBC - PullRequest
2 голосов
/ 31 августа 2011

Мне нужно проанализировать планы выполнения запросов и извлечь из них данные для моего приложения.Несмотря на то, что этот ответ JDBC Oracle - план объяснения Fetch для запроса помог мне получить план выполнения текста через jdbc, невозможно проанализировать вывод текста, поскольку запросы являются параметрами времени выполнения.Приведенный ниже пример запроса возвращает XML в Sql Developer, но НЕ через jdbc.Я использую Oracle 11g XE с драйвером ojdbc6.jar.Почему этот запрос не работает через API JDBC?Будем благодарны за любую помощь.

EXPLAIN PLAN SET STATEMENT_ID = '123' FOR select * из заданий, где rownum <3 порядка по job_id desc </p>

SELECT dbms_xplan.build_plan_xml (Statement_id => '123') КАК 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 Ответ

2 голосов
/ 31 августа 2011

Я не думаю, что результат возвращается как "настоящий" тип JDBC XML.

Попробуйте

resultSet.getString(1)

вместо

Если это не сработает, попробуйте также привести результат к засечке:

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

Это определенно потребует от вас использования getString (1) вместо getSQLXML ()

...