컴퓨터활용/자바

ORA-00604 나 ORA-01000 오류가 날 때

멜번초이 2012. 5. 29. 15:29


java.sql.SQLException: ORA-00604: 순환 SQL 레벨 1 에 오류가 발생했습니다

ORA-01000: 최대 열기 커서 수를 초과했습니다


위와 같은 오류가 날 때는 Statement 나 ResultSet 을 open 하기만 하고 close 가 없어서 나는 오류 입니다. 

특히 while, for 같은 루프문에서  적절한 위치에서 close 를 하고 있는 지 확인할 필요가 있습니다.


아래와 같은  샘플 코드가 있다고 했을 때 rsColumns.close(); 를 누락시켰을 때 위와 같은 오류가 발생되었다. 실제 코드는 while loop 가 길어서 ResultSet 닫는 것을 놓쳐도 눈에 잘 띄지 않아서 오류를 찾는데 어려움이 있었다.  


ResultSet rsTables = dbMeta.getTables(null, schemaName, "%", types);

 

int count = 0;

while (rsTables.next()) {

        

         String countQuery = "SELECT count(*) AS TOTAL_COUNT

+ FROM ALL_COL_COMMENTS

+ WHERE OWNER = 'GPDBD' AND TABLE_NAME= ? AND COMMENTS is not null ";

 

         PreparedStatement countPsmt = connection.prepareStatement(countQuery);

        

         countPsmt.close();

 

         ResultSet rsColumns = dbMeta.getColumns(null, schemaName, tableName, "%");

 

         while( rsColumns.next() )

         {

                  String typeName = rsColumns.getString("TYPE_NAME");

                  String colName = rsColumns.getString("COLUMN_NAME");

 

         }  // end of while

         rsColumns.close();

}

 

rsTables.close();