Sql roda no oracle e não roda jdbc:odbc

5 respostas
E

Galera,
Tenho a sql abaixo que consulta um banco oracle. Ela roda normalmente em outros aplicativo e não roda na classe java. Utilizo a ponte jdbc:odbc e possuo outras sql´s trabalhando normalmente. A exception acusa “No data found” (não encontra dados no banco sendo que roda normalmente em outro aplicativo).
Alguém pode me ajudar?

Desde já agradeço,
Edilson Cavalieri

sql = "SELECT C.DAT_REFER_PRODC Data, C.COD_IDENT_CORRI Corrida, C.COD_IDENT_ACO Código_do_aço, " +
"DECODE(SUBSTR(C.COD_IDENT_ACO,1,1),‘H’,‘GNO’,‘C’,‘CARBONO’,‘L’,‘CARBONO’, " +
"‘E’,‘GO’,‘I’,‘INOX’) Tipo_de_Aço, PA.NOM_IDENT_ACO Nome, " +
"C.LET_PRODC_CORRI Letra, C.PES_CTBIL_CORRI Contábil, " +
"nvl(sum(adic),0) Sucata,SUM(produc)/COUNT() Vazado, sum(carga) / count() Carga " +

"FROM  (SELECT C1.COD_IDENT_CORRI corrida1, AC.QTD_ADIC_INSUM adic " +
                 "FROM   ACECPGER_ACI.ADICOES_CORRIDAS AC, ACECPGER_ACI.CORRIDAS_SN C1, " +
                        "ACECPGER.INSUMOS I, ACECPGER_ACI.MUDANCAS_LOTES_MATERIAIS MLM " +
                 "WHERE  C1.COD_IDENT_CORRI = AC.COD_IDENT_CORRI " +
                        "AND AC.SEQ_MUDAN_LOTIN = MLM.SEQ_MUDAN_LOTIN " +
                        "AND MLM.COD_IDENT_INSUM = I.COD_IDENT_INSUM " +
                        "AND C1.DAT_REFER_PRODC >= TO_DATE('01062006','DDMMYYYY') " +
                        "AND C1.DAT_REFER_PRODC < TO_DATE('13062006','DDMMYYYY') " +
                        "AND C1.COD_EQPMT_PRODC LIKE 'MRP%' " +
                        "AND C1.COD_IDENT_CORRI NOT LIKE '%R%' " +
                        "AND MLM.COD_IDENT_INSUM LIKE 'S%') suc, " +
            
                "(SELECT C2.COD_IDENT_CORRI corrida2, sum(CCA.PES_CARGD_CORRI) carga " +
                  "FROM  ACECPGER_ACI.CARGAS_CORRIDA_ACIARIA CCA, ACECPGER_ACI.CORRIDAS_SN C2 " +
                  "WHERE C2.COD_IDENT_CORRI = CCA.COD_IDENT_CORRI " +
                        "AND C2.DAT_REFER_PRODC >= TO_DATE('01062006','DDMMYYYY') " +
                        "AND C2.DAT_REFER_PRODC < TO_DATE('13062006','DDMMYYYY') " +
                        "AND C2.COD_EQPMT_PRODC LIKE 'MRP%' " +
                        "AND C2.COD_IDENT_CORRI NOT LIKE '%R%' " +
                  "GROUP BY  C2.COD_IDENT_CORRI ) cargacorrida, " +
            
                "(SELECT C3.COD_IDENT_CORRI corrida3, sum(PC.PES_VAZAD_CORRI) produc " +
                  "FROM  ACECPGER_ACI.PRODUCAO_CORRIDAS_SN PC , ACECPGER_ACI.CORRIDAS_SN C3 " +
                  "WHERE C3.COD_IDENT_CORRI = PC.COD_IDENT_CORRI " +
                       "AND C3.DAT_REFER_PRODC >= TO_DATE('01062006','DDMMYYYY') " +
                       "AND C3.DAT_REFER_PRODC < TO_DATE('13062006','DDMMYYYY') " +
                       "AND C3.COD_EQPMT_PRODC LIKE 'MRP%' " +
                       "AND C3.COD_IDENT_CORRI NOT LIKE '%R%' " +
                  "GROUP BY  C3.COD_IDENT_CORRI ) producao, " +
            
                "CORRIDAS C, ACECPGER_ACI.PRODUCAO_CORRIDAS_SN PC, ACECPGER.PR_ACO_SN PA, " +
                "ACECPGER_ACI.CARGAS_CORRIDA_ACIARIA CCA " +
         "WHERE C.COD_IDENT_CORRI = suc.corrida1(+) " +
                "AND C.COD_IDENT_CORRI = cargacorrida.corrida2(+) " +
                "AND C.COD_IDENT_CORRI = producao.corrida3(+) " +
                "AND C.DAT_REFER_PRODC >= TO_DATE('01062006','DDMMYYYY') " +
                "AND C.DAT_REFER_PRODC < TO_DATE('13062006','DDMMYYYY') " +
                "AND C.COD_EQPMT_PRODC LIKE 'MRP%' " +
                "AND C.COD_IDENT_CORRI = PC.COD_IDENT_CORRI " +
                "AND C.COD_IDENT_CORRI = CCA.COD_IDENT_CORRI " +
                "AND C.COD_IDENT_CORRI NOT LIKE '%R%' " +
                "AND PA.COD_IDENT_ACO = C.COD_IDENT_ACO " +
         "GROUP BY C.DAT_REFER_PRODC,C.COD_IDENT_CORRI, C.COD_IDENT_ACO, " +
                   "DECODE(SUBSTR(C.COD_IDENT_ACO,1,1),'H','GNO','C','CARBONO','L','CARBONO','E','GO','I','INOX'), " +
                   "PA.NOM_IDENT_ACO,C.LET_PRODC_CORRI, C.PES_CTBIL_CORRI ";

5 Respostas

P

Cara posta o seu código, aí fica mais fácil para ajudar vc.

_fs

Utilize o driver adequado para a versão do Oracle com a qual trabalha.

E

A conexão com o banco é esta abaixo:

public Conexao( String banco, String usuario, String senha )

{	

String URL = jdbc:odbc: + banco;

try

{

Class.forName( “sun.jdbc.odbc.JdbcOdbcDriver” );

con = DriverManager.getConnection( URL, usuario, senha );

}

catch( Exception e )

{

JOptionPane.showMessageDialog(null, “Atenção! Erro de conexão ao banco de dados! \n” +

"Favor informar a mensagem abaixo ao adminstrador do sistema! \n " +

e.getMessage(), “Erro de acesso a banco de dados”, JOptionPane.WARNING_MESSAGE);

erro = 1;

}

}

O codigo de leitura do banco é este (faço notar que rodo outras sql´s com este mesmo código):

private void processaRendimentoMRPL(){

String sql = "";
    Statement stmt = null;
    ResultSet rs = null;
    ArrayList dados = new ArrayList();
    String[] colunas = new String[]{"Data","Corrida","Código do aço","Tipo de Aço", "Nome" ,"Classe","Letra","Contábil","Sucata","Vazado","Carga"};
                      
    sql = "SELECT C.DAT_REFER_PRODC Data, C.COD_IDENT_CORRI Corrida, C.COD_IDENT_ACO Código_do_aço, " +
                  "DECODE(SUBSTR(C.COD_IDENT_ACO,1,1),'H','GNO','C','CARBONO','L','CARBONO', " +
                  "'E','GO','I','INOX') Tipo_de_Aço, PA.NOM_IDENT_ACO Nome, " +
                  "C.LET_PRODC_CORRI Letra, C.PES_CTBIL_CORRI Contábil, " +
                  "nvl(sum(adic),0) Sucata,SUM(produc)/COUNT(*) Vazado, sum(carga) / count(*) Carga " +
            
          "FROM  (SELECT C1.COD_IDENT_CORRI corrida1, AC.QTD_ADIC_INSUM adic " +
                 "FROM   ACECPGER_ACI.ADICOES_CORRIDAS AC, ACECPGER_ACI.CORRIDAS_SN C1, " +
                        "ACECPGER.INSUMOS I, ACECPGER_ACI.MUDANCAS_LOTES_MATERIAIS MLM " +
                 "WHERE  C1.COD_IDENT_CORRI = AC.COD_IDENT_CORRI " +
                        "AND AC.SEQ_MUDAN_LOTIN = MLM.SEQ_MUDAN_LOTIN " +
                        "AND MLM.COD_IDENT_INSUM = I.COD_IDENT_INSUM " +
                        "AND C1.DAT_REFER_PRODC >= TO_DATE('" + dataInicial + "','DD/MM/YYYY') " +
                        "AND C1.DAT_REFER_PRODC < TO_DATE('" + dataFinal + "','DD/MM/YYYY') " +
                        "AND C1.COD_EQPMT_PRODC LIKE 'MRP%' " +
                        "AND C1.COD_IDENT_CORRI NOT LIKE '%R%' " +
                        "AND MLM.COD_IDENT_INSUM LIKE 'S%') suc, " +
            
                  "(SELECT C2.COD_IDENT_CORRI corrida2, sum(CCA.PES_CARGD_CORRI) carga " +
                  "FROM  ACECPGER_ACI.CARGAS_CORRIDA_ACIARIA CCA, ACECPGER_ACI.CORRIDAS_SN C2 " +
                  "WHERE C2.COD_IDENT_CORRI = CCA.COD_IDENT_CORRI " +
                        "AND C2.DAT_REFER_PRODC >= TO_DATE('" + dataInicial + "','DD/MM/YYYY') " +
                        "AND C2.DAT_REFER_PRODC < TO_DATE('" + dataFinal + "','DD/MM/YYYY') " +
                        "AND C2.COD_EQPMT_PRODC LIKE 'MRP%' " +
                        "AND C2.COD_IDENT_CORRI NOT LIKE '%R%' " +
                  "GROUP BY  C2.COD_IDENT_CORRI ) cargacorrida, " +
            
                  "(SELECT C3.COD_IDENT_CORRI corrida3, sum(PC.PES_VAZAD_CORRI) produc " +
                  "FROM  ACECPGER_ACI.PRODUCAO_CORRIDAS_SN PC , ACECPGER_ACI.CORRIDAS_SN C3 " +
                  "WHERE C3.COD_IDENT_CORRI = PC.COD_IDENT_CORRI " +
                       "AND C3.DAT_REFER_PRODC >= TO_DATE('" + dataInicial + "','DD/MM/YYYY') " +
                       "AND C3.DAT_REFER_PRODC < TO_DATE('" + dataFinal + "','DD/MM/YYYY') " +
                       "AND C3.COD_EQPMT_PRODC LIKE 'MRP%' " +
                       "AND C3.COD_IDENT_CORRI NOT LIKE '%R%' " +
                  "GROUP BY  C3.COD_IDENT_CORRI ) producao, " +
            
                  "CORRIDAS C, ACECPGER_ACI.PRODUCAO_CORRIDAS_SN PC, ACECPGER.PR_ACO_SN PA, " +
                  "ACECPGER_ACI.CARGAS_CORRIDA_ACIARIA CCA " +
            
         "WHERE C.COD_IDENT_CORRI = suc.corrida1(+) " +
                "AND C.COD_IDENT_CORRI = cargacorrida.corrida2(+) " +
                "AND C.COD_IDENT_CORRI = producao.corrida3(+) " +
                "AND C.DAT_REFER_PRODC >= TO_DATE('" + dataInicial + "','DD/MM/YYYY') " +
                "AND C.DAT_REFER_PRODC < TO_DATE('" + dataFinal + "','DD/MM/YYYY') " +
                "AND C.COD_EQPMT_PRODC LIKE 'MRP%' " +
                "AND C.COD_IDENT_CORRI = PC.COD_IDENT_CORRI " +
                "AND C.COD_IDENT_CORRI = CCA.COD_IDENT_CORRI " +
                "AND C.COD_IDENT_CORRI NOT LIKE '%R%' " +
                "AND C.COD_IDENT_ACO =PA.COD_IDENT_ACO " +
            
         "GROUP BY C.DAT_REFER_PRODC,C.COD_IDENT_CORRI, C.COD_IDENT_ACO, " +
                   "DECODE(SUBSTR(C.COD_IDENT_ACO,1,1),'H','GNO','C','CARBONO','L','CARBONO','E','GO','I','INOX'), " +
                   "PA.NOM_IDENT_ACO,C.LET_PRODC_CORRI, C.PES_CTBIL_CORRI ";  
                    

    try {
        stmt = Conexao.recuperaConexao().createStatement();
        rs = stmt.executeQuery( sql );
        int i = 0;
         
        while( rs.next())
             {
                 dados.add(new String[]{ String.valueOf(rs.getObject(1)).substring(0,10), rs.getString(2), rs.getString(3),
                 rs.getString(4), rs.getString(5), rs.getString(5), rs.getString(6),
                 String.valueOf(rs.getInt(7)),String.valueOf(rs.getInt(8)), String.valueOf(rs.getInt(9)),
                 String.valueOf(rs.getInt(10))}); 
                 i++;
             }
        
               rs.first();
        
             SimpleTableModel modelo = new SimpleTableModel(dados, colunas);
             JTable jTable1 = new JTable(modelo);
             jTable1.setAutoResizeMode(jTable1.AUTO_RESIZE_OFF);               
             jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
             jScrollPane1000.setViewportView(jTable1);
             
        } catch( Exception sqlex ){
                JOptionPane.showMessageDialog(null, "Atenção! Erro no carregamento dos dados! \n" +
                "Favor informar a mensagem abaixo ao adminstrador do sistema! \n " +
                sqlex.getMessage(), "Erro de acesso a banco de dados", JOptionPane.WARNING_MESSAGE);
                return;
        } finally	{
            if( rs != null ) {
                try {
                    rs.close();
                }
            
                catch( Exception sqlEx ) {
                    JOptionPane.showMessageDialog(null, "Atenção! Erro de fechamento do banco de dados! \n" +
                    "Favor informar a mensagem abaixo ao adminstrador do sistema! \n " +
                    sqlEx.getMessage(), "Erro de acesso a banco de dados", JOptionPane.WARNING_MESSAGE);
                    rs = null;
                }
                
                if( stmt != null ){
                    try{
                        stmt.close();
                    }
                    catch( Exception sqlEx ) {
                        JOptionPane.showMessageDialog(null, "Atenção! Erro de fechamento de conexão! \n" +
                        "Favor informar a mensagem abaixo ao adminstrador do sistema! \n " +
                        sqlEx.getMessage(), "Erro de acesso a banco de dados", JOptionPane.WARNING_MESSAGE);
                }
                stmt = null;
            }
        }
    }         
    
}
neoramon

Opa! 8)

tchê, to com o mesmo problema, vc conseguiu resolver? era o driver?

Será q alguém tem alguma outra solução?

:?:

midianet

cara utiliza assim o

Class.forName(“oracle.jdbc.driver.OracleDriver”);

usa esse driver o jar e o ojdbc14.jar que vem dentro do client oracle

Criado 8 de junho de 2006
Ultima resposta 10 de jan. de 2008
Respostas 5
Participantes 5