2010-12-07 108 views
10

我想知道如何使用Java获取解释计划。我需要这个理由是因为我们有一个框架,特殊用户可以制作报告。这些报告有时候会产生很大的疑问,我们要在这个问题上进行解释并存储成本。通过这种方式,我们可以分析后期的高成本查询并进行优化。JDBC Oracle - 为查询获取解释计划

示例代码,给了我非法列例外:

ResultSet rs = null; 
    try { 
     oracle = ConnectionManager.getConnection(ConnectionManager.Test); 
     pstmt = oracle.prepareStatement("begin execute immediate 
     'explain plan for SELECT 1 from Dual'; end;"); 
     rs = pstmt.executeQuery(); 
     while (rs.next()) { 
      System.out.println(rs.getString(1)); 
     } 

回答

14

使用此:

 
oracle = ConnectionManager.getConnection(ConnectionManager.Test); 
stmt = oracle.createStatement() 
stmt.execute("explain plan for SELECT 1 from Dual"); 
rs = stmt.executeQuery("select plan_table_output from table(dbms_xplan.display())"); 
while (rs.next()) 
{ 
    System.out.println(rs.getString(1)); 
} 
+0

谢谢!这工作。你知道如何获取成本而不是整个计划表吗? – 2010-12-07 12:45:37