Problema com SQL do Oracle no Java

Seguinte pessoal,

Preciso gerar uma segunda via de boleto online.
O Sistema é o Data Sul com algumas customizações que o próprio pessoal daqui fez, ou seja, tudo em Delphi.

Peguei a consulta SQL responsável por adquirir os dados de preenchimento do boleto, porém, é uma consulta gigantesca, com distincts, replace, e tudo o que é possível de se usar.

Resolvi criar um arquivo texto e colocar essa consulta nele para no meu programa java ler e passar essa consulta ao PreparedStatement, porém, ao executar a consulta dá o seguinte erro:

ORA-00904: nome inválido de coluna

Ao executar o mesmo código no PL/SQL, ela executa normalmente.
Detalhe é que o erro dá no “executeQuery()” nem tô pegando os dados do resultSet ainda.

Acho que o problema é que o Java não está entendendo ou executando direito algumas partes do SQL.
Segue exemplo da consulta:

SELECT DISTINCT F.NRREGISTRO,
       F.NRCONTRATO,
       F.CDLOTACAO,
       DF.NRPERIODO,
       REPLACE(TO_CHAR(DF.NRPERIODO / 100, '99999.99'), '.', '/') NRPERIODO_MASK,
       F.NRFATURA,
....
      case
         when substr(f.nrfatura,1,2) in ('13','80','81','82','83') then tr.cdcliente
         when nvl(f.nrfamilia,0) = 0 then f.nrcontrato
         else f.nrcontrato || lpad(f.nrfamilia,6,'0')
       end cdcliente,
....
       TF.TXOBSERVACAO_FATURA_01,
       TF.TXOBSERVACAO_FATURA_02,
       E1.CDESTADO,
       SUBSTR(E1.NRCEP, 1, 5) || '-' || SUBSTR(E1.NRCEP, 6, 3) NRCEP,
       E1.NRTELEFONE,
....
 DECODE(TR.CDSITUACAO,
              '0',               
              'ABERTO',
              '1',
              'PAGO EM',
              '2',
              'PARCIAL',
              '8',
              'CANCELADO ',
              '') TXSITUACAO,

       TR.DTULTIMO_RECEBIMENTO
  FROM PRODUCAO.FATURAMENTO          F,
       PRODUCAO.TIPO_DE_FATURAMENTO  TF,
       PRODUCAO.TITULO_A_RECEBER     TR,
....
 WHERE F.NRFATURA = TR.NRDOCUMENTO(+)
   AND F.NRFATURA = PDF.NRFATURA
   AND (TF.TPFATURAMENTO = SUBSTR(F.NRFATURA, 1, 2) OR
       TF.TPFATURAMENTO || '-' = SUBSTR(F.NRFATURA, 1, 2))
   AND DF.NRREGISTRO_CLIENTE = P1.NRREGISTRO
....
AND TDF.NRSQ_TRIB_DOCUMENTO_FISCAL =
       BDBV.PCK_ROT_CALC_TRIB.TributoDocFiscal_PegaImposto(DF.NRSQ_DOCUMENTO_FISCAL,
                                                           'ISS')
   AND E2.TPENDERECO = bdbv.pck_sjbv_endereco.Pega_EnderecoRefCobr(DF.NRREGISTRO_CLIENTE)
 AND DF.NRSQ_TIPO_DOCUMENTO_FISCAL = 1
 AND DF.CDTIPO_GERACAO = 0       

Eu suprimi vários trechos pq a consulta é realmente muito grande, mas coloquei o trechos onde acho que talvez o Java não esteja entendendo e por isso dá o erro.

Se alguém puder me dar uma luz, desde já agradeço.

Abraço!

E ae dom blz?!

Então, a coluna que o Java não consegue ler está ai no sql q vc postou?

Eu não manjo muito de oracle, mas ao que me consta, os Alias precisam serem precedidos de um “as”.

Por ex:

REPLACE(TO_CHAR(DF.NRPERIODO / 100, '99999.99'), '.', '/') NRPERIODO_MASK,

ficaria assim:

REPLACE(TO_CHAR(DF.NRPERIODO / 100, '99999.99'), '.', '/') as NRPERIODO_MASK,

Será que ele não está entendendo que a coluna “NRPERIODO_MASK” é uma coluna?

Abs();

Bom dia. Na verdade isto é uma rotina, um programa em Oracle.

Se você usa exatamente o mesmo programa no PL/SQL e funciona sem problemas significa que o problema está relacionado ao tratamento que você está efetuando no Java.
Em relação ao as como o colego acima citou, o as é utilizado caso você esteja dando um “apelido” ou um novo nome a uma coluna de sua tabela. Mas não creio que seja este o problema já que, como você mesmo citou, a rotina funciona perfeitamente no Oracle.

A questão é que como realmente esta rotina foi montada, exemplo:

Select * from Tabela

Pelo o que eu sei, o Java não interpreta o * como “busca todas as colunas desta tabela” fazendo com que você especifique as colunas que deseja consultar.
O ideial, por maior que seja esse programa Oracle, é você postar tanto o programa completo quanto o código em Java que faz uso desta rotina e o StackTrace do seu erro ok?

Um abraço.

Esqueci de comentar.

Lenin, esta pergunta: [quote]Será que ele não está entendendo que a coluna “NRPERIODO_MASK” é uma coluna?[/quote]

Você quis dizer, Será que ele não está entendendo que a coluna “NRPERIODO_MASK” é uma tabela? Certo? :slight_smile:
Apesar de eu achar dificíl, já que no PL/SQL isto funciona, isto pode ser realmente o problema, não custa testar :slight_smile:

Só um detalhe, se testar com o AS e o mesmo erro ocorrer, retire o AS, pois pode afetar todo o resto da sua rotina.
Abraços.

Opa cara valew por ajudar.
Seguinte, esse código eu recuperei do TQuery que o gerador de boleto do sistema em Delphi utiliza pra gerar os boletos. No Delphi funciona de boa, consultando usando o PL/SQL também funciona perfeito sem precisar colocar o “AS” apontando o nome.

Porém vou tentar adicionar aqui no código pra ver se surte algum efeito e logo em seguido posto o resultado, dando certo ou errado.
:wink:

Edit: Nel, obrigado pela explicação, então acho que nem vou adicionar o “AS” no código. Acho que eu não poderia postar todo o SQL aqui, mas vou ver o que consigo.

Tenta executar partes das instruções SQL e vai incrementando o código até detectar o erro, acho que assim fica fácil de descobrir o problema.

Segue o SQL da consulta:

SELECT DISTINCT F.NRREGISTRO,
       F.NRCONTRATO,
       F.CDLOTACAO,
       DF.NRPERIODO,
       REPLACE(TO_CHAR(DF.NRPERIODO / 100, '99999.99'), '.', '/') NRPERIODO_MASK,
       F.NRFATURA,
       F.NRNOSSONUMERO,
       F.VLTOTAL_FATURADO,
       F.DTVENCIMENTO,
       F.TPFATURA,     
       F.VLBASE_IRRF,
       F.VLIR_FONTE,                     
       F.VLBASE_INSS,
       F.VLBASE_ISS,
       F.VLISS,
       F.PEJUROS,
       F.PEMULTA,
       F.AOAVULSA,
       F.CDCARTEIRA_COBRANCA,
       case
         when substr(f.nrfatura,1,2) in ('13','80','81','82','83') then tr.cdcliente
         when nvl(f.nrfamilia,0) = 0 then f.nrcontrato
         else f.nrcontrato || lpad(f.nrfamilia,6,'0')
       end cdcliente,

       TF.TXOBSERVACAO_FATURA_01,
       TF.TXOBSERVACAO_FATURA_02,
       TF.TXOBSERVACAO_FATURA_03,
       TF.TXOBSERVACAO_FATURA_04,
       TF.TXOBSERVACAO_FATURA_05,
       TF.TXOBSERVACAO_BOLETO_01,
       TF.TXOBSERVACAO_BOLETO_02,
       TF.TXOBSERVACAO_BOLETO_03,
       TF.AOIMPRIME_LEI_9876_INSS,
       TF.AOIMPRIME_LEI_8981_IRRF,
       P1.NOPESSOA,                             
       P1.NRCGC_CPF,
       P1.NRINSCEST_RG,
       P1.NRINSCMUN,
       P1.TPPESSOA,
       E1.NOLOGRADOURO,
       E1.NRIMOVEL,
       E1.NOBAIRRO,
       E1.CDESTADO,
       SUBSTR(E1.NRCEP, 1, 5) || '-' || SUBSTR(E1.NRCEP, 6, 3) NRCEP,
       E1.NRTELEFONE,
       C1.NOCIDADE,                                                                                                                                                                              
       E2.NOLOGRADOURO NOLOGRADOURO_COBR,
       E2.TXCOMPLEMENTO,                         
       E2.NRIMOVEL NRIMOVEL_COBR,
       E2.NOBAIRRO NOBAIRRO_COBR,
       E2.CDESTADO CDESTADO_COBR,
       E2.NRCEP NRCEP_COBR,  
       E2.NRTELEFONE NRTELEFONE_COBR,
       C2.NOCIDADE NOCIDADE_COBR,
       CDP.CDCONTRATO_PADRAO,
       CP.TPCONTRATO,
       CC.NRAGENCIA,
       CC.NRCONTA_CORRENTE,
       CC.TPCONTA_CORRENTE,
       CB.NRCARTEIRA_COBRANCA,
       CB.CDOPERACAO_RECEBER,
       DF.NRSQ_DOCUMENTO_FISCAL,
       DF.NRREGISTRO_CLIENTE,
       DF.DTEMISSAO,
       DF.NRDOCUMENTO_FISCAL,        
       DF.CDNATUREZA_PRESTACAO_SERVICO,
       DF.CDFISCAL_OPERACAO,
       DF.CDTIPO_GERACAO,
       P2.NOPESSOA,
       TDF.VLBASE_BRUTA,
       TDF.VLDEDUCAO_BASE,
       TDF.VLBASE_LIQUIDA,
       TDF.PEALIQUOTA,
       TDF.VLIMPOSTO,
       RT.CDIDENTIFICACAO_REGRA,
       RT.DTREFERENCIA,
       RT.TXMENSAGEM_DOC_FISCAL,
       VGT.AORETENCAO_FONTE,
       TR.CDPORTADOR,
       TR.CDSITUACAO,                     
       DECODE(TR.CDSITUACAO,
              '0',               
              'ABERTO',
              '1',
              'PAGO EM',
              '2',
              'PARCIAL',
              '8',
              'CANCELADO ',
              '') TXSITUACAO,

       TR.DTULTIMO_RECEBIMENTO
  FROM PRODUCAO.FATURAMENTO          F,
       PRODUCAO.TIPO_DE_FATURAMENTO  TF,
       PRODUCAO.TITULO_A_RECEBER     TR,
       PRODUCAO.PESSOA               P1,
       PRODUCAO.ENDERECO             E1,
       PRODUCAO.ENDERECO             E2,
       PRODUCAO.CIDADE               C1,
       PRODUCAO.CIDADE               C2,
       PRODUCAO.PESSOA               P2,
       PRODUCAO.CONTRATO_DA_PESSOA   CDP,
       PRODUCAO.CONTRATO_PADRAO      CP,
       PRODUCAO.CARTEIRA_COBRANCA    CB,
       PRODUCAO.CONTA_CORRENTE       CC,
       SJBV.PRE_DOCUMENTO_FISCAL     PDF,
       SJBV.DOCUMENTO_FISCAL         DF, 
       SJBV.TRIBUTO_DOCUMENTO_FISCAL TDF,
       SJBV.REGRA_TRIBUT_DETALHE     RTD,
       SJBV.VIGENCIA_REGRA_TRIBUT    VGT,
       SJBV.REGRA_TRIBUTACAO         RT,
       SJBV.TRIBUTO_UNID_TRIBUTARIA  TUT

 WHERE F.NRFATURA = TR.NRDOCUMENTO(+)
   AND F.NRFATURA = PDF.NRFATURA
   AND (TF.TPFATURAMENTO = SUBSTR(F.NRFATURA, 1, 2) OR
       TF.TPFATURAMENTO || '-' = SUBSTR(F.NRFATURA, 1, 2))
   AND DF.NRREGISTRO_CLIENTE = P1.NRREGISTRO
   AND DF.CDTIPO_ENDERECO = E1.TPENDERECO
   AND E1.NRREGISTRO = DF.NRREGISTRO_CLIENTE
   AND E1.CDCIDADE = C1.CDCIDADE            
   AND E2.NRREGISTRO = DF.NRREGISTRO_CLIENTE
   AND E2.CDCIDADE = C2.CDCIDADE                       
   AND F.NRREGISTRO = P2.NRREGISTRO
   AND (CDP.NRCONTRATO = F.NRCONTRATO AND CDP.NRREGISTRO = F.NRREGISTRO)
   AND CDP.CDCONTRATO_PADRAO = CP.CDCONTRATO
   AND CB.CDCARTEIRA_COBRANCA = F.CDCARTEIRA_COBRANCA
   AND (CB.CDEMPRESA = CC.CDEMPRESA AND CB.NRBANCO = CC.NRBANCO AND
       CB.NRAGENCIA = CC.NRAGENCIA AND                                               
       CB.NRCONTA_CORRENTE = CC.NRCONTA_CORRENTE)                                                                                    
   AND PDF.NRSQ_DOCUMENTO_FISCAL = DF.NRSQ_DOCUMENTO_FISCAL
   AND DF.NRSQ_DOCUMENTO_FISCAL = TDF.NRSQ_DOCUMENTO_FISCAL
   AND TDF.NRSQ_REGRA_TRIBUT_DETALHE = RTD.NRSQ_REGRA_TRIBUT_DETALHE
   AND RTD.NRSQ_VIGENCIA_REGRA_TRIBUT = VGT.NRSQ_VIGENCIA_REGRA_TRIBUT
   AND VGT.NRSQ_REGRA_TRIBUTACAO = RT.NRSQ_REGRA_TRIBUTACAO              
   AND RT.NRSQ_TRIB_UNID_TRIBUTARIA = TUT.NRSQ_TRIB_UNID_TRIBUTARIA
   AND DF.CDSITUACAO = '1'
   AND TUT.CDTRIBUTO = 'ISS'

   AND TDF.NRSQ_TRIB_DOCUMENTO_FISCAL =
       SJBV.PCK_ROT_CALC_TRIB.TributoDocFiscal_PegaImposto(DF.NRSQ_DOCUMENTO_FISCAL,
                                                           'ISS')
   AND E2.TPENDERECO = sjbv.pck_sjbv_endereco.Pega_EnderecoRefCobr(DF.NRREGISTRO_CLIENTE)
 AND DF.NRSQ_TIPO_DOCUMENTO_FISCAL = 1
 AND DF.CDTIPO_GERACAO = 0                         
 AND DF.DTEMISSAO >= '01/12/2009'
 AND DF.DTEMISSAO <= '31/12/2009'
 AND TR.CDCLIENTE = 0119

o StackTrace do erro:

23/12/2009 10:14:43 ConsultaBoleto getDadosBoleto
SEVERE: null
java.sql.SQLException: ORA-00904: nome inválido de coluna

	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
	at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
	at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
	at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
	at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteDescribe(TTC7Protocol.java:830)
	at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:2391)
	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2672)
	at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
	at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:527)
	at ConsultaBoleto.getDadosBoleto(ConsultaBoleto.java:18)

E o código que executo só para fins de teste.

[code]public class ConsultaBoleto {

public void getDadosBoleto() {
	LeArquivo arq = new LeArquivo();
	String sql = arq.getSql();
	

	try {
		Connection conn = new ConnectionFactory().getConnection();
		PreparedStatement stmt = conn.prepareStatement(sql);
		ResultSet rs = stmt.executeQuery();

		while (rs.next()) {
			//System.out.println(rs.getString("F.NRFATURA"));
		}
		stmt.close();
		try {
			conn.close();
		} catch (SQLException ex) {
			Logger.getLogger(ConsultaBoleto.class.getName()).log(Level.SEVERE, null, ex);
		}
	} catch (SQLException ex) {
		Logger.getLogger(ConsultaBoleto.class.getName()).log(Level.SEVERE, null, ex);
	}
}
StringBuffer sbSql = new StringBuffer();

}
[/code]

Notem que a consulta está com os valor de busca inserido nela já, estou primeiramente vendo se funciona para depois modificar e passar parâmetros de pesquisa pra ela.
Edit1: A conexão com o banco é efetuada perfeitamente, porém dá o erro descrito.

Só uma pergunta, você já efetuou o debug para ver como está sendo efetuada a consulta ao seu arquivo?
No caso, o retorno desta string SQL está correta?

Para confirmar que está exatamente igual ao código no arquivo, dê um System.out.println() na sua string sql ok?
É o ideal. Agora vou dar uma olhada no seu programa Oracle e ver se chego a uma conclusão rs.

Edit: Teste com o AS como o Lenin sugeriu, pode ser que o Java não esteja interpretando corretamente o Replace ou o Java interpreta de outra forma, fazendo com que seja necessário a utilização do AS, caso não funcione com AS, apenas remova ele :slight_smile:

Abraços.

[quote=nel]Só uma pergunta, você já efetuou o debug para ver como está sendo efetuada a consulta ao seu arquivo?
No caso, o retorno desta string SQL está correta?

Para confirmar que está exatamente igual ao código no arquivo, dê um System.out.println() na sua string sql ok?
É o ideal. Agora vou dar uma olhada no seu programa Oracle e ver se chego a uma conclusão rs.

Abraços.[/quote]

Já debuguei sim amigo, vem igual ao arquivo. Tanto que copiei o resultado do System.out e joguei no PL/SQL e funcionou normal.

Valew pela ajuda cara!

Outro detalhe, “NRPERIODO_MASK” é uma coluna? Se sim, de qual tabela?
Talvez você precise no Java usar o apelido da tabela e este nome, assim:

F.NRPERIODO_MASK, supondo que F seja o apelido da tabela no qual a coluna NRPERIODO_MASK pertença.

Edit: quer um teste? Remova esta linha: REPLACE(TO_CHAR(DF.NRPERIODO / 100, ‘99999.99’), ‘.’, ‘/’) NRPERIODO_MASK, e Teste.

Abraços.

[quote=nel]Outro detalhe, “NRPERIODO_MASK” é uma coluna? Se sim, de qual tabela?
Talvez você precise no Java usar o apelido da tabela e este nome, assim:

F.NRPERIODO_MASK, supondo que F seja o apelido da tabela no qual a coluna NRPERIODO_MASK pertença.

Edit: quer um teste? Remova esta linha: REPLACE(TO_CHAR(DF.NRPERIODO / 100, ‘99999.99’), ‘.’, ‘/’) NRPERIODO_MASK, e Teste.

Abraços.[/quote]

Nel, “NRPERIODO_MASK” é o nome que está sendo dado a consulta "REPLACE(TO_CHAR(DF.NRPERIODO / 100, ‘99999.99’), ‘.’, ‘/’) " e faz referência ao “DF.NRPERIODO” que é da tabela:
SJBV.DOCUMENTO_FISCAL DF.

Coloquei o “AS” e mudou o erro:

java.sql.SQLException: ORA-00933: comando SQL não encerrado adequadamente

	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
	at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
	at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
	at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
	at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteDescribe(TTC7Protocol.java:830)
	at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:2391)
	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2672)
	at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
	at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:527)
	at ConsultaBoleto.getDadosBoleto(ConsultaBoleto.java:18)
	at GeraBoletoItau.main(GeraBoletoItau.java:14)

Vou remover a linha conforme sugeriu e já posto o resultado.
Thanks!

Edit1: Removi a linha e o mesmo erro ocorreu, em ambos os casos, tanto no arquivo com o “AS” como na primeira versão do SQL.

Edit2: Tô achando que a melhor maneira vai ser quebrar esse SQL em várias partes e fazer consultas subsequentes pra pegar os dados sem problemas.

Como imaginei, é que nunca usei o Replace no Oracle. Na verdade, deu erro pois ele tenta dar um Replace utilizando AS, acredito que seja isto.
Poste os novos resultados então.

Abraços.

Rápido você hein? rs
Então, mas quando você removeu esta linha deu ORA-00933: comando SQL não encerrado adequadamente ou ORA-00904: nome inválido de coluna ?

Realmente, ainda não consegui encontrar o erro, até porque verificar erros de nome de coluna sem conhecer a sua database fica complicado.
Mas então, faça como disse, quebre em partes esta consulta e teste aos poucos no Java. Tente também o seguinte, faça um select comum buscando qualquer informação mas utilizando todas as colunas e tabelas que você usa na consulta original, apenas por teste.

Poste os resultados quando quiser que vamos tentando ajudar.
Abraços.

[quote=nel]Rápido você hein? rs
Então, mas quando você removeu esta linha deu ORA-00933: comando SQL não encerrado adequadamente ou ORA-00904: nome inválido de coluna ?

Realmente, ainda não consegui encontrar o erro, até porque verificar erros de nome de coluna sem conhecer a sua database fica complicado.
Mas então, faça como disse, quebre em partes esta consulta e teste aos poucos no Java. Tente também o seguinte, faça um select comum buscando qualquer informação mas utilizando todas as colunas e tabelas que você usa na consulta original, apenas por teste.

Poste os resultados quando quiser que vamos tentando ajudar.
Abraços.[/quote]

Então, quando eu removi a linha na primeira versão do SQL deu ORA-00904 e quando removi na segunda versão a que está utilizando o “AS” deu ORA-00933.

É complicado mesmo cara tentar entender uma coisa que não foi vc quem fez. Não faz nem um mês que eu entrei na empresa e estou tendo que aprender a base de dados deles na base da porrada… :cry:
Não tem documentação nenhuma nem do sistema nem da base.

Mas vou tentando aqui, qualquer progresso eu aviso aqui no tópico.
Mesmo assim, muito obrigado pela ajuda de todos!
:wink:

Se você pegou o select e executou fora do Java e funcionou e pelo Java o Oracle retornou o erro “ORA-00904: nome inválido de coluna”, logicamente o Java alterou alguma coisa no SQL antes de enviar para o Oracle.

Ou seja, você precisa ver o SQL que o Oracle recebeu para achar o erro.

Ativa o Trace da sessão e seja aonde esta o erro.

Falou.

Bruno, como eu ativo esse trace? :oops:

Edit: Resolvido a questão do trace, foi só olha na doc do driver do Oracle. porém dá o erro: “Oracle Jdbc tracing is not avaliable in a non-debug zip/jar file”
Tentando resolver…

Edit2: O erro dado pelo trace é devido a necessidade de se utilizar um driver do Oracle específico para o debug. Já o encontrei e adicionei ao programa. Porém, o trace não retornou nada de interessante até agora, apesar do erro.

Concordo, aprender na base da porrada é complicada mas no fim pode ser bom.
Siga a ideia do Bruno, debug e tente encontrar o erro.

Abraços.

Segue o resultado do Trace.
Não consegui enxergar nada nele até o momento…ou estou cego…

DRVR OPER Enabled logging (moduleMask 0x0fffffff, categoryMask 0x0000008f)

DRVR OPER OracleConnection.setAutoCommit(autoCommit=true)

DRVR OPER OracleConnection.setAutoCommit(autoCommit): return

DRVR OPER OracleConnection.getDefaultFixedString() returning false

DRVR SQLS SQL: "ALTER SESSION SET NLS_LANGUAGE = 'BRAZILIAN PORTUGUESE'"

DRVR SQLS Input SQL:  "ALTER SESSION SET NLS_LANGUAGE = 'BRAZILIAN PORTUGUESE'"

DRVR OPER OracleConnection.getAutoCommit() returned true

DRVR OPER OracleStatement.cleanupForBatching()

DRVR SQLS SQL: "ALTER SESSION SET NLS_TERRITORY = 'BRAZIL'"

DRVR SQLS Input SQL:  "ALTER SESSION SET NLS_TERRITORY = 'BRAZIL'"

DRVR OPER OracleConnection.getAutoCommit() returned true

DRVR OPER OracleStatement.cleanupForBatching()

DRVR OPER OracleStatement.executeQuery(sql)

DRVR SQLS SQL: "SELECT VALUE FROM NLS_INSTANCE_PARAMETERS WHERE PARAMETER ='NLS_DATE_FORMAT'"

DRVR SQLS Input SQL:  "SELECT VALUE FROM NLS_INSTANCE_PARAMETERS WHERE PARAMETER ='NLS_DATE_FORMAT'"

DRVR OPER OracleConnection.getAutoCommit() returned true

DRVR OPER OracleResultSetImpl.getString(columnIndex=1)


DRVR SQLS SQL: "SELECT DISTINCT F.NRREGISTRO,       F.NRCONTRATO,       F.CDLOTACAO,       DF.NRPERIODO,       REPLACE(TO_CHAR(DF.NRPERIODO / 100, '99999.99'), '.', '/') NRPERIODO_MASK,       F.NRFATURA,       F.NRNOSSONUMERO,       F.VLTOTAL_FATURADO,       F.DTVENCIMENTO,       F.TPFATURA,            F.VLBASE_IRRF,       F.VLIR_FONTE,                            F.VLBASE_INSS,       F.VLBASE_ISS,       F.VLISS,       F.PEJUROS,       F.PEMULTA,       F.AOAVULSA,       F.CDCARTEIRA_COBRANCA,       case         when substr(f.nrfatura,1,2) in ('13','80','81','82','83') then tr.cdcliente         when nvl(f.nrfamilia,0) = 0 then f.nrcontrato         else f.nrcontrato || lpad(f.nrfamilia,6,'0')       end cdcliente,       TF.TXOBSERVACAO_FATURA_01,       TF.TXOBSERVACAO_FATURA_02,       TF.TXOBSERVACAO_FATURA_03,       TF.TXOBSERVACAO_FATURA_04,       TF.TXOBSERVACAO_FATURA_05,       TF.TXOBSERVACAO_BOLETO_01,       TF.TXOBSERVACAO_BOLETO_02,       TF.TXOBSERVACAO_BOLETO_03,       TF.AOIMPRIME_LEI_9876_INSS,       TF.AOIMPRIME_LEI_8981_IRRF,       P1.NOPESSOA,                                    P1.NRCGC_CPF,       P1.NRINSCEST_RG,       P1.NRINSCMUN,       P1.TPPESSOA,       E1.NOLOGRADOURO,       E1.NRIMOVEL,       E1.NOBAIRRO,       E1.CDESTADO,       SUBSTR(E1.NRCEP, 1, 5) || '-' || SUBSTR(E1.NRCEP, 6, 3) NRCEP,       E1.NRTELEFONE,       C1.NOCIDADE,                                                                                                                                                                                     E2.NOLOGRADOURO NOLOGRADOURO_COBR,       E2.TXCOMPLEMENTO,                                E2.NRIMOVEL NRIMOVEL_COBR,       E2.NOBAIRRO NOBAIRRO_COBR,       E2.CDESTADO CDESTADO_COBR,       E2.NRCEP NRCEP_COBR,         E2.NRTELEFONE NRTELEFONE_COBR,       C2.NOCIDADE NOCIDADE_COBR,       CDP.CDCONTRATO_PADRAO,       CP.TPCONTRATO,       CC.NRAGENCIA,       CC.NRCONTA_CORRENTE,       CC.TPCONTA_CORRENTE,       CB.NRCARTEIRA_COBRANCA,       CB.CDOPERACAO_RECEBER,       DF.NRSQ_DOCUMENTO_FISCAL,       DF.NRREGISTRO_CLIENTE,       DF.DTEMISSAO,       DF.NRDOCUMENTO_FISCAL,               DF.CDNATUREZA_PRESTACAO_SERVICO,       DF.CDFISCAL_OPERACAO,       DF.CDTIPO_GERACAO,       P2.NOPESSOA,       TDF.VLBASE_BRUTA,       TDF.VLDEDUCAO_BASE,       TDF.VLBASE_LIQUIDA,       TDF.PEALIQUOTA,       TDF.VLIMPOSTO,       RT.CDIDENTIFICACAO_REGRA,       RT.DTREFERENCIA,       RT.TXMENSAGEM_DOC_FISCAL,       VGT.AORETENCAO_FONTE,       TR.CDPORTADOR,       TR.CDSITUACAO,                            DECODE(TR.CDSITUACAO,              '0',                             'ABERTO',              '1',              'PAGO EM',              '2',              'PARCIAL',              '8',              'CANCELADO ',              '') TXSITUACAO,       TR.DTULTIMO_RECEBIMENTO  FROM PRODUCAO.FATURAMENTO          F,       PRODUCAO.TIPO_DE_FATURAMENTO  TF,       PRODUCAO.TITULO_A_RECEBER     TR,       PRODUCAO.PESSOA               P1,       PRODUCAO.ENDERECO             E1,       PRODUCAO.ENDERECO             E2,       PRODUCAO.CIDADE               C1,       PRODUCAO.CIDADE               C2,       PRODUCAO.PESSOA               P2,       PRODUCAO.CONTRATO_DA_PESSOA   CDP,       PRODUCAO.CONTRATO_PADRAO      CP,       PRODUCAO.CARTEIRA_COBRANCA    CB,       PRODUCAO.CONTA_CORRENTE       CC,       SJBV.PRE_DOCUMENTO_FISCAL     PDF,       SJBV.DOCUMENTO_FISCAL         DF,        SJBV.TRIBUTO_DOCUMENTO_FISCAL TDF,       SJBV.REGRA_TRIBUT_DETALHE     RTD,       SJBV.VIGENCIA_REGRA_TRIBUT    VGT,       SJBV.REGRA_TRIBUTACAO         RT,       SJBV.TRIBUTO_UNID_TRIBUTARIA  TUT WHERE F.NRFATURA = TR.NRDOCUMENTO(+)   AND F.NRFATURA = PDF.NRFATURA   AND (TF.TPFATURAMENTO = SUBSTR(F.NRFATURA, 1, 2) OR       TF.TPFATURAMENTO || '-' = SUBSTR(F.NRFATURA, 1, 2))   AND DF.NRREGISTRO_CLIENTE = P1.NRREGISTRO   AND DF.CDTIPO_ENDERECO = E1.TPENDERECO   AND E1.NRREGISTRO = DF.NRREGISTRO_CLIENTE   AND E1.CDCIDADE = C1.CDCIDADE               AND E2.NRREGISTRO = DF.NRREGISTRO_CLIENTE   AND E2.CDCIDADE = C2.CDCIDADE                          AND F.NRREGISTRO = P2.NRREGISTRO   AND (CDP.NRCONTRATO = F.NRCONTRATO AND CDP.NRREGISTRO = F.NRREGISTRO)   AND CDP.CDCONTRATO_PADRAO = CP.CDCONTRATO   AND CB.CDCARTEIRA_COBRANCA = F.CDCARTEIRA_COBRANCA   AND (CB.CDEMPRESA = CC.CDEMPRESA AND CB.NRBANCO = CC.NRBANCO AND       CB.NRAGENCIA = CC.NRAGENCIA AND                                                      CB.NRCONTA_CORRENTE = CC.NRCONTA_CORRENTE)                                                                                       AND PDF.NRSQ_DOCUMENTO_FISCAL = DF.NRSQ_DOCUMENTO_FISCAL   AND DF.NRSQ_DOCUMENTO_FISCAL = TDF.NRSQ_DOCUMENTO_FISCAL   AND TDF.NRSQ_REGRA_TRIBUT_DETALHE = RTD.NRSQ_REGRA_TRIBUT_DETALHE   AND RTD.NRSQ_VIGENCIA_REGRA_TRIBUT = VGT.NRSQ_VIGENCIA_REGRA_TRIBUT   AND VGT.NRSQ_REGRA_TRIBUTACAO = RT.NRSQ_REGRA_TRIBUTACAO                 AND RT.NRSQ_TRIB_UNID_TRIBUTARIA = TUT.NRSQ_TRIB_UNID_TRIBUTARIA   AND DF.CDSITUACAO = '1'   AND TUT.CDTRIBUTO = 'ISS'   AND TDF.NRSQ_TRIB_DOCUMENTO_FISCAL =       SJBV.PCK_ROT_CALC_TRIB.TributoDocFiscal_PegaImposto(DF.NRSQ_DOCUMENTO_FISCAL,                                                           'ISS')   AND E2.TPENDERECO = sjbv.pck_sjbv_endereco.Pega_EnderecoRefCobr(DF.NRREGISTRO_CLIENTE) AND DF.NRSQ_TIPO_DOCUMENTO_FISCAL = 1 AND DF.CDTIPO_GERACAO = 0                          AND DF.DTEMISSAO >= '01/12/2009' AND DF.DTEMISSAO <= '31/12/2009' AND TR.CDCLIENTE = 0119 "

DRVR OPER OracleConnection.getDefaultFixedString() returning false

DRVR OPER ResultSetUtil.needIdentifier(typeCode=1): return: false

DRVR SQLS Input SQL:  "SELECT DISTINCT F.NRREGISTRO,       F.NRCONTRATO,       F.CDLOTACAO,       DF.NRPERIODO,       REPLACE(TO_CHAR(DF.NRPERIODO / 100, '99999.99'), '.', '/') NRPERIODO_MASK,       F.NRFATURA,       F.NRNOSSONUMERO,       F.VLTOTAL_FATURADO,       F.DTVENCIMENTO,       F.TPFATURA,            F.VLBASE_IRRF,       F.VLIR_FONTE,                            F.VLBASE_INSS,       F.VLBASE_ISS,       F.VLISS,       F.PEJUROS,       F.PEMULTA,       F.AOAVULSA,       F.CDCARTEIRA_COBRANCA,       case         when substr(f.nrfatura,1,2) in ('13','80','81','82','83') then tr.cdcliente         when nvl(f.nrfamilia,0) = 0 then f.nrcontrato         else f.nrcontrato || lpad(f.nrfamilia,6,'0')       end cdcliente,       TF.TXOBSERVACAO_FATURA_01,       TF.TXOBSERVACAO_FATURA_02,       TF.TXOBSERVACAO_FATURA_03,       TF.TXOBSERVACAO_FATURA_04,       TF.TXOBSERVACAO_FATURA_05,       TF.TXOBSERVACAO_BOLETO_01,       TF.TXOBSERVACAO_BOLETO_02,       TF.TXOBSERVACAO_BOLETO_03,       TF.AOIMPRIME_LEI_9876_INSS,       TF.AOIMPRIME_LEI_8981_IRRF,       P1.NOPESSOA,                                    P1.NRCGC_CPF,       P1.NRINSCEST_RG,       P1.NRINSCMUN,       P1.TPPESSOA,       E1.NOLOGRADOURO,       E1.NRIMOVEL,       E1.NOBAIRRO,       E1.CDESTADO,       SUBSTR(E1.NRCEP, 1, 5) || '-' || SUBSTR(E1.NRCEP, 6, 3) NRCEP,       E1.NRTELEFONE,       C1.NOCIDADE,                                                                                                                                                                                     E2.NOLOGRADOURO NOLOGRADOURO_COBR,       E2.TXCOMPLEMENTO,                                E2.NRIMOVEL NRIMOVEL_COBR,       E2.NOBAIRRO NOBAIRRO_COBR,       E2.CDESTADO CDESTADO_COBR,       E2.NRCEP NRCEP_COBR,         E2.NRTELEFONE NRTELEFONE_COBR,       C2.NOCIDADE NOCIDADE_COBR,       CDP.CDCONTRATO_PADRAO,       CP.TPCONTRATO,       CC.NRAGENCIA,       CC.NRCONTA_CORRENTE,       CC.TPCONTA_CORRENTE,       CB.NRCARTEIRA_COBRANCA,       CB.CDOPERACAO_RECEBER,       DF.NRSQ_DOCUMENTO_FISCAL,       DF.NRREGISTRO_CLIENTE,       DF.DTEMISSAO,       DF.NRDOCUMENTO_FISCAL,               DF.CDNATUREZA_PRESTACAO_SERVICO,       DF.CDFISCAL_OPERACAO,       DF.CDTIPO_GERACAO,       P2.NOPESSOA,       TDF.VLBASE_BRUTA,       TDF.VLDEDUCAO_BASE,       TDF.VLBASE_LIQUIDA,       TDF.PEALIQUOTA,       TDF.VLIMPOSTO,       RT.CDIDENTIFICACAO_REGRA,       RT.DTREFERENCIA,       RT.TXMENSAGEM_DOC_FISCAL,       VGT.AORETENCAO_FONTE,       TR.CDPORTADOR,       TR.CDSITUACAO,                            DECODE(TR.CDSITUACAO,              '0',                             'ABERTO',              '1',              'PAGO EM',              '2',              'PARCIAL',              '8',              'CANCELADO ',              '') TXSITUACAO,       TR.DTULTIMO_RECEBIMENTO  FROM PRODUCAO.FATURAMENTO          F,       PRODUCAO.TIPO_DE_FATURAMENTO  TF,       PRODUCAO.TITULO_A_RECEBER     TR,       PRODUCAO.PESSOA               P1,       PRODUCAO.ENDERECO             E1,       PRODUCAO.ENDERECO             E2,       PRODUCAO.CIDADE               C1,       PRODUCAO.CIDADE               C2,       PRODUCAO.PESSOA               P2,       PRODUCAO.CONTRATO_DA_PESSOA   CDP,       PRODUCAO.CONTRATO_PADRAO      CP,       PRODUCAO.CARTEIRA_COBRANCA    CB,       PRODUCAO.CONTA_CORRENTE       CC,       SJBV.PRE_DOCUMENTO_FISCAL     PDF,       SJBV.DOCUMENTO_FISCAL         DF,        SJBV.TRIBUTO_DOCUMENTO_FISCAL TDF,       SJBV.REGRA_TRIBUT_DETALHE     RTD,       SJBV.VIGENCIA_REGRA_TRIBUT    VGT,       SJBV.REGRA_TRIBUTACAO         RT,       SJBV.TRIBUTO_UNID_TRIBUTARIA  TUT WHERE F.NRFATURA = TR.NRDOCUMENTO(+)   AND F.NRFATURA = PDF.NRFATURA   AND (TF.TPFATURAMENTO = SUBSTR(F.NRFATURA, 1, 2) OR       TF.TPFATURAMENTO || '-' = SUBSTR(F.NRFATURA, 1, 2))   AND DF.NRREGISTRO_CLIENTE = P1.NRREGISTRO   AND DF.CDTIPO_ENDERECO = E1.TPENDERECO   AND E1.NRREGISTRO = DF.NRREGISTRO_CLIENTE   AND E1.CDCIDADE = C1.CDCIDADE               AND E2.NRREGISTRO = DF.NRREGISTRO_CLIENTE   AND E2.CDCIDADE = C2.CDCIDADE                          AND F.NRREGISTRO = P2.NRREGISTRO   AND (CDP.NRCONTRATO = F.NRCONTRATO AND CDP.NRREGISTRO = F.NRREGISTRO)   AND CDP.CDCONTRATO_PADRAO = CP.CDCONTRATO   AND CB.CDCARTEIRA_COBRANCA = F.CDCARTEIRA_COBRANCA   AND (CB.CDEMPRESA = CC.CDEMPRESA AND CB.NRBANCO = CC.NRBANCO AND       CB.NRAGENCIA = CC.NRAGENCIA AND                                                      CB.NRCONTA_CORRENTE = CC.NRCONTA_CORRENTE)                                                                                       AND PDF.NRSQ_DOCUMENTO_FISCAL = DF.NRSQ_DOCUMENTO_FISCAL   AND DF.NRSQ_DOCUMENTO_FISCAL = TDF.NRSQ_DOCUMENTO_FISCAL   AND TDF.NRSQ_REGRA_TRIBUT_DETALHE = RTD.NRSQ_REGRA_TRIBUT_DETALHE   AND RTD.NRSQ_VIGENCIA_REGRA_TRIBUT = VGT.NRSQ_VIGENCIA_REGRA_TRIBUT   AND VGT.NRSQ_REGRA_TRIBUTACAO = RT.NRSQ_REGRA_TRIBUTACAO                 AND RT.NRSQ_TRIB_UNID_TRIBUTARIA = TUT.NRSQ_TRIB_UNID_TRIBUTARIA   AND DF.CDSITUACAO = '1'   AND TUT.CDTRIBUTO = 'ISS'   AND TDF.NRSQ_TRIB_DOCUMENTO_FISCAL =       SJBV.PCK_ROT_CALC_TRIB.TributoDocFiscal_PegaImposto(DF.NRSQ_DOCUMENTO_FISCAL,                                                           'ISS')   AND E2.TPENDERECO = sjbv.pck_sjbv_endereco.Pega_EnderecoRefCobr(DF.NRREGISTRO_CLIENTE) AND DF.NRSQ_TIPO_DOCUMENTO_FISCAL = 1 AND DF.CDTIPO_GERACAO = 0                          AND DF.DTEMISSAO >= '01/12/2009' AND DF.DTEMISSAO <= '31/12/2009' AND TR.CDCLIENTE = 0119 "

DRVR OPER OraclePreparedStatement.executeQuery()

DRVR OPER OraclePreparedStatement.executeUpdate()

DRVR OPER OracleConnection.getAutoCommit() returned true
23/12/2009 11:26:02 ConsultaBoleto getDadosBoleto
SEVERE: null
java.sql.SQLException: ORA-00904: nome inválido de coluna

	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
	at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
	at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
	at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
	at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteDescribe(TTC7Protocol.java:830)
	at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:2391)
	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2672)
	at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
	at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:527)
	at ConsultaBoleto.getDadosBoleto(ConsultaBoleto.java:19)
	at GeraBoletoItau.main(GeraBoletoItau.java:14)

Vai dar trabalho mas compare essa String do Trace com a que possui no arquivo.
Outro detalhe, faça como eu disse para testar:

Retire todos os case, replace e etc, mas use todas as colunas e tabelas que constam no arquivo, exemplo:

select f.id from tabela f where f.uid = 10;

No seu caso todas as tabelas e colunas que são usadas no arquivo original só para confirmar o erro de coluna.
Abraços.

[quote=nel]Vai dar trabalho mas compare essa String do Trace com a que possui no arquivo.
Outro detalhe, faça como eu disse para testar:

Retire todos os case, replace e etc, mas use todas as colunas e tabelas que constam no arquivo, exemplo:

select f.id from tabela f where f.uid = 10;

No seu caso todas as tabelas e colunas que são usadas no arquivo original só para confirmar o erro de coluna.
Abraços.[/quote]

Bom cara, eu fiz a comparação aqui, foi rápido de fazer pq usei o WinMerge.
Eu também removi os replace, decode, case, etc… Mesmo erro de nome inválido de coluna.
Vou começar a particionar esse SQL e executar por partes pra ver se vai dar certo.

Qualquer progresso eu deixo avisado aqui.