Oracle JDBC erro em consulta com DESC

0 respostas
karluqs

Galera blz,

Seguinte, eu tenho uma tabela no Oracle 8i e preciso fazer uma consulta nela trazendo os nomes em ordem decrescente, até ae tudo bem, tô usando o driver mais recente 1.4, só que ao executá-la dá o seguinte erro:

java.sql.SQLException: ORA-01467: chave de classificação extensa demais

Bom descobri que isso ocorre justatamente porque estou usando DESC na consulta, que é a seguinte:

SELECT EMPRESA FROM EMPRESA ORDER BY EMPRESA DESC

O erro só ocorre se algum registro do campo no qual estou usando DESC estiver gastando mais da metade do seu tamanho reservado, no caso o meu campo EMPRESA é um VARCHAR2(40), se algum registro de EMPRESA tiver caracteres >= 21 dá erro, quando menor que isso traz a consulta certinha. Usando a consulta sem o DESC traz normal independente do tamanho.

Já tentei com outras tabelas e campos e o erro ocorre da mesma forma sempre pelo mesmo motivo, esse problema não ocorre quando acesso SQL Server (com outro driver claro :smiley: ), inclusive quando faço a mesma consulta para Oracle usando Delphi funciona normal também, só me restou a conclusão de erro no JDBC do Oracle, para este caso com DESC, alguém já encontrou um erro parecido ??

Abaixo segue um programinha de teste que fiz e a tabela usada:

CREATE TABLE Empresa
   (
   Codigo_Identificacao         NUMBER(5),
   Empresa                      VARCHAR2(40),
   );
import java.sql.*;

public class desc
{
   public desc()
   {
      try
      {
         Class.forName("oracle.jdbc.driver.OracleDriver");
         Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@<ip_server>:<porta>:<banco>", "<usuario>", "<senha>");
         PreparedStatement prepStmnt = connection.prepareStatement("SELECT EMPRESA FROM EMPRESA ORDER BY EMPRESA DESC");
         ResultSet resultSet = prepStmnt.executeQuery();
         System.out.println("OK");
      }
      catch (SQLException sqlEx)
      {
         System.out.println("Erro SQL: " + sqlEx.toString());
      }
      catch (ClassNotFoundException classEx)
      {
         System.out.println("Erro Class: " + classEx.toString());
      }
   }

   public static void main(String[] args)
   {
      desc teste = new desc();
   }
}

Obrigado pela atenção,

Criado 29 de setembro de 2003
Respostas 0
Participantes 1