Vocês perceberam pelo SQL que minhas consultas alternavam entre duas bases, uma chamada “PRODUCAO” e outra chamada “SJBV”?
Pois é, ele sempre dá erro no nome das colunas que são referentes a base “SJBV”. Removendo elas consigo executar numa boa.
A dúvida agora é, como montar uma conexão que acesse simultaneamente as duas bases.
Na minha Factory eu somente estou ativando o user e senha da base PRODUCAO, sendo que também preciso conectar em SJBV.
Tenta fazer o seguinte, acredito que seja o caso de permissão, sendo assim, neste teu select, usando no java talvez você precise especificar o usuario.
Assim, você disse que consulta o banco PRODUÇÃO e SJBV. Então, como você já está conectado ao banco PRODUÇÃO nas tabelas pertencentes ao SJBV você digita também o nome do usuario. Exemplo:
Faz o seguinte, utilize o mesmo usuário que você usou para conectar diretamente no Oracle, através deo SQL*Plus ou outro Client.
Caso não seja possível utilizar esse usuário, crie um Synonim para utilizar a tabela no outro usuário sem especificar o OWNER.
Ex:
create or replace public synonym NOME_DO_SINONIMO_IGUAL_DA_TABELA
for usuário.tabela;
Eu verifiquei também, que você chama essa function do Oracle na Query:
sjbv.pck_sjbv_endereco.Pega_EnderecoRefCobr
Verique as permissões dela, verifique quais tabelas essa função utiliza, conceda as permissões necessárias e crie os synonyms tb.
Por último, verifique a versão do Client Oracle que está na maquina que está rodando a aplicação que desenvolveu, e compare com a versão que utiliza na máquina que conectou diretamente (Caso sejam máquinas diferentes, claro).
Vale também conferir o IP do Servidor no TNSnames das duas máquinas. Será que não estão acessando bases diferentes?
Verifique em
c:[ORACLEHOME]\NETWORK\ADMIN\tnsnames.ora
Bom, deve ser alguma coisa dessas, eu li que o pessoa falou de colocar “as” antes do Alias. Mas não tem nada a ver, você pode verificar que mesmo a Oracle não utiliza essa sintaxe em seus treinamentos, ela não segue o Padrão SQLANSI.
Tenta fazer o seguinte, acredito que seja o caso de permissão, sendo assim, neste teu select, usando no java talvez você precise especificar o usuario.
Assim, você disse que consulta o banco PRODUÇÃO e SJBV. Então, como você já está conectado ao banco PRODUÇÃO nas tabelas pertencentes ao SJBV você digita também o nome do usuario. Exemplo:
Usuario da SJBV:
Herick. Sua consulta.
Herick.nome_da_tabela.nome_da_coluna.
Tente neste formato ok?
Abraços.[/quote]
Talvez eu tenha me expressado mal.
Isso já está sendo feito. Note que em alguns locais está PRODUCAO.alguma_coisa e outras são SJBV.alguma_coisa.
Mesmo especificando o usuário que no caso são dois ele não consegue conectar nas tabelas do usuário SJBV.
No meu DriverManager, estou passando o host, o usuário “producao” e a senha dele.
Creio que não é possível passar dois usuários e instanciar uma única conexão.
Agora que vi que já tinha conseguido rodar.
Você conecta com um usuário, e usa o Owner antes dos objetos que precisar acessar de outro usuário.
Ou cria sinônimos.
[quote=fabiomazzo]Agora que vi que já tinha conseguido rodar.
Você conecta com um usuário, e usa o Owner antes dos objetos que precisar acessar de outro usuário.
Ou cria sinônimos.[/quote]
Valew cara, vou tentar aqui as dicas que vc me passou.
Eu estava começando a responder o seu post anterior…rsrs. Mas então, o banco está em um único servidor, olhei no arquivo de configuração e está tudo ok.
Quando entro no PL/SQL, preciso escolher com qual usuário logar, entrando tanto com o usuário Producao ou com o usuário SJBV eu consigo rodar esse SQL inteiro sem problemas.
No sistema em desenvolvimento eu estou conectando com o Producao e dá os erros descritos nos tópicos anteriores.
Vou ver o esquema de Owner que vc me passou. Thank’s!
Caras, fiz uma coisa aqui e consegui resolver o problema.
Analisei todo o SQL e descobri qual a coluna onde dá o erro no java.
Não consegui entender o motivo, mas um campo que está perfeitamente ok na base de dados, nome correto, tudo bonitinho, simplesmente não funciona.
É incrível mesmo, seu eu copio e colo no PL/SQL vai numa boa, em java dá o erro que estou reclamando desde o início. A questão de permissão do usuário eu até pensei que poderia ser mesmo, mas quando testei havia removido todas as chamadas do usuário SJBV e com isso removi a chamada do campo problemático, só analisando um por um que funcionou.
O campo é “RT.TXMENSAGEM_DOC_FISCAL” da tabela “SJBV.REGRA_TRIBUTACAO RT”.
Sem ele, todo o SQL funciona perfeitinho.
Não sei nem se vou querer tentar entender o motivo disso, mas qqr avanço eu posto aqui.
Aproveito pra agradecer mais uma vez todo o pessoal que respondeu, ajudou, indicou caminhos e tudo o mais.
Obrigadão mesmo!!!
Eu preciso do conteúdo do campo que misteriosamente dá problema, mas já sei como posso recuperar o valor dele, porém, deu outro problema estranhíssimo. Meu resultSet não traz nada.
Não dá erro, não dá exceção na consulta, porém, não consigo pegar nenhum valor do ResultSet.
A mesma consulta feita no PL/SQL me retorna os dados.
Debuguei e não encontrei nada que pudesse me dar uma luz.
A string “sql” do PreparedStatement é a consulta gigantesca que agora retorna sem erros. Porém, ele sequer entra no while. Já tentei pegar os campos pelo próprio resultSet, mas não vem nada.