2011-08-31 2 views
2

쿼리에 대한 실행 계획을 구문 분석하고 내 응용 프로그램에 대해 데이터를 추출해야합니다. 이 대답은 JDBC Oracle - Fetch explain plan for query이지만 jdbc를 통해 텍스트 실행 계획을 가져 오는 데 도움이되었지만 쿼리가 런타임 매개 변수이기 때문에 텍스트 출력을 구문 분석 할 수 없습니다. 아래의 샘플 쿼리는 "SQL Developer"에서는 xml을 반환하지만 jdbc에서는 반환하지 않습니다. ojdbc6.jar 드라이버와 함께 Oracle 11g XE를 사용하고 있습니다. 이 쿼리가 jdbc API를 통해 작동하지 않는 이유는 무엇입니까? 어떤 도움을 주시면 감사하겠습니다.jdbc를 통해 Oracle 실행 계획 XML을 얻는 방법

PLAN에게 조합을 설명 STATEMENT_ID = '123'FOR 선택 * 작업에서 어디 ROWNUM < DESC 작업 ID 3 순서

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

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(); 
    } 

답변

2

나는 결과가 "진짜"JDBC의 XML 형식으로 반환됩니다 생각하지 않는다 :

다음은 내 자바 코드입니다.

가 작동하지 않는 경우 CLOB에 결과를 캐스팅도 시도

resultSet.getString(1) 

대신

보십시오 : 확실히 당신이 (에는 getString를 사용하는 것이 필요합니다

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

1) getSQLXML() 대신

+0

getString (1)을 사용하면 null 값을 사용하는 동안 to_clob는 다음 문자를 제공합니다. jdbc 및 SQL Developer 모두에서 ror Snoopy

+0

그러나이 오류 메시지는 기본적으로 작동하고 dbms_xplan.build_plan_xml을 실행하는 동안 다른 오류가 발생했음을 의미합니다. –

+1

@ user812236, TO_CLOB 접근을 시도 할 때 사용한 정확한 문을 표시 할 수 있습니까? 'select to_clob (dbms_xplan.build_plan_xml (statement_id => '123')) AS XPLAN FROM dual은 SQL Developer에서 잘 작동했습니다. –