ResultSet volta vazio

Bom pessoal,

Ontem eu tinha postado uma série de problemas que eu tive com uma consulta em SQL que eu vou utilizar em um programa conforme vcs podem ver no tópico: http://www.guj.com.br/posts/list/147994.java

Consegui resolver parte dos problemas, porém mais um começou a ocorrer.
Postei no tópico anterior mas resolvi postar aqui também.

Meu ResultSet não retorna dado nenhum da consulta que eu faço, porém, se eu coloco a mesma consulta no PL/SQL ela me retorna os dados que eu preciso.

Como pode uma consulta correta, não retornar nada?
Há alguma forma de verificar isso?

Outra coisa que eu também postei lá mas vou perguntar aqui. O SQL da minha consulta, dava erro de “nome inválido de coluna”, porém a coluna existe e o nome está correto, mas a consulta pelo Java só funcionou após a remoção da linha com o nome do campo, sendo que o mesmo SQL funciona perfeito no PL/SQL.

Se tiverem dúvidas quanto ao código, dêem uma conferida no tópico que eu citei acima, lá tem todas as informações.
Desde já obrigado por qualquer ajuda!

No post anterior você usou o PreparedStatement, acho que você deve usar o CallableStatement para chamar as instruções PL/SQL.

Segue um exemplo

CallableStatement cs = null;
		ResultSet rs = null;
		Connection conn = null;

		try {
			conn = this.dataSource.getConnection();
			cs = conn.prepareCall("{?=call proc.myfunc(?,?,?)}");
			cs.registerOutParameter(1, Types.VARCHAR);
			cs.setString(2, CRYPT_TYPE);
			cs.setString(3, CRYPT_BASE);
			cs.setString(4, encryptedString);
			cs.execute();

			String unencriptedString = cs.getString(1);

Tenta pra ver!

Cara, tentei aqui e também não deu certo.

Enquanto eu vou tentando resolver esses problemas, tentei pegar a tal coluna que eu tive que remover do SQL pra parar de dar erro.
Não sei como mas não encontra o campo. Colocando em qualquer editor ela retorna o resultado, no java dá nome de coluna inválido. É um copy paste, não tem mudança nenhuma, incrível como não consegue rodar.

É o seguinte SQL que funciona em todo lugar menos no java:
“select TXMENSAGEM_DOC_FISCAL from SJBV.REGRA_TRIBUTACAO”

E se eu coloco “Select * from SJBV.REGRA_TRIBUTACAO” retorna a consulta, porém o índice da referente coluna ele não encontra.

O dado é um Varchar2(2000).

Se a consulta executa em outro sistema então a instrução esta correta.

Verifica se você usou o mesmo usuário do Oracle para o sistema em delphi e o java, pode ser isso.

Agora se for o mesmo usuário é muito estranho, eu colocaria uma instrução sql simples e vericaria o resultado.

Usa o mesmo usuário sim, tanto no delphi quanto no java.

No caso acima ele utiliza o sinônimo, mas já alterei o usuário pra verificar, fiz a consulta simples e tal. Essa coluna em específico não vem.
Como você mesmo disse, se a consulta roda em outros locais, é porque a instrução está correta. Ou tem alguma restrição no banco, ou uma coisa muito boba acontecendo pra dar um erro desses. Não consigo entender o pq dos problemas…tensooo…

Cara, tem alguma pegada ai!

Caso você não tenha feito, tenta usar alguma IDE como PLSQL Developer que mostre a tabela e verifica se o campo existe e aproveita para ver o tipo, acho que truque está no delphi.

A maioria dos testes que eu ando fazendo é no PLSQL Developer. O campo existe, tem dados nele, já vi todos os tipos de dados e não vai de jeito nenhum.
Mesmo debugando, colocando o trace do oracle no código, não mostra nada que faça descobrir o erro.

O pior ainda é a consulta pela qual abri esse tópico, que rodando no PLSQL Developer retorna os dados que eu quero mas que não traz nada no resultSet.

Já fiz várias coisas utilizando jdbc só que em bases menores e consultas normais.
É a primeira vez que estou tendo que trabalhar com os SQLs mais complexos e não consigo entender a razão desses erros.
Primeiro o erro com o “nome inválido de coluna” e em segundo a Consulta correta que não retorna nada.

Bom, fiz um outro programinha aqui pra me retornar todas as tabelas e suas respectivas colunas na mesma base de dados que estou usando.
Ele me retorna tudo, porém na tabela onde existe o tal campo “inválido” ele não mostra o nome dessa respectiva coluna mesmo. É como se ela não existisse na base de dados, mas existe.

Eu não sei mais o que fazer pra parar de acontecer isso. Pensei que poderia ser a versão do driver mas não é, testei com o driver mais novo e o problema persiste.

O pior ainda é que mesmo removendo esse campo da minha consulta e mesmo o SQL possuindo resultado de uma linha, o resultSet retorna vazio.

Vai fazer uma semana que eu estou tentando resolver isso e tive pouquíssimo progresso.

Resolvido. A resposta está no tópico: http://www.guj.com.br/posts/list/148189.java

Obrigado a todos pela ajuda e pelas dicas.