Problema Acessar Package

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
colored
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 01 Out 2010 8:37 am
Localização: São Paulo - SP
Novo no Fórum :D.

Bom Estou com um Problemaço.. tipo criei um package PKG_TESTE com usuario SYSTEM..
e tenho um outro usuario MyUser.. e não consigo encontrar esse pacote..
Já dei todas grants imaginaveis pra ele.. e criei um synonym..

Selecionar tudo

CREATE PUBLIC SYNONYM PKG_TESTE FOR SYSTEM.PKG_TESTE
MAS N CONSIGO ENCONTRAR ESSE PACOTE DE MANEIRA NENHUMA...

alguém POR FAVOR PODE ME AJUDAR... muito OBRIGADO...[/code]
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Esta gerando alguma mensagem de erro ou apenas não visualiza a package?
colored
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 01 Out 2010 8:37 am
Localização: São Paulo - SP
Novo no Fórum :D.

Então.. eu to fazendo o teste do pacote.. pelo Java... ele retorna isso...

Selecionar tudo

ORA-04063: package body "MyUser.PKG_TESTE" contém erros
ORA-06508: PL/SQL: não foi localizada a unidade de programa que está sendo chamada: "MyUser.PKG_TESTE"
A Chamada quando é assim Da Erro...

Selecionar tudo

call PKG_PRO_CAC.fn_Excluir_Usuario

MAS ASSIM DÁ CERTO...

Selecionar tudo

call SYSTEM.PKG_PRO_CAC.fn_Excluir_Usuario
JÁ CRIEI UM SYNONYM MAS N DA CERTO...
alexandervinson
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Qua, 17 Nov 2010 8:29 am
Localização: Belem - Para

Certo,

Primeiro, não sei a tua necessidade. Mas criar um pacote no usuario system é bem perigoso hehehe.
Outra coisa, se sabes o usuário que vai usar o pacote dê preferencia a sinônimos privados.

Selecionar tudo

CREATE SYNONYM USUARIO.SINONIMO FOR SYSTEM.PKG_TESTE 
Mas vamos ao problema maior.
Para verificar qual usuário sob qual usuário você criou o pacore

Selecionar tudo

Select * 
from all_objects a
where a.OBJECT_NAME like '%NOME_DO_PACOTE%'
Testes que você pode executar....
Com o usuário dono do pacote teste ele, ele pode estar com erros de compilação.
Na consulta anterior tem uma coluna status, se estiver inválido este assume o valor 'INVALID'

Se funcionou vamos ao segundo grupo de testes:

Com o usuário que você quer que execute o pacote, teste ele sem usar sinônimo, ou seja chamando SYSTEM.PKG_TESTE.PROCEDURE.
Neste momento:
Se não funcionar é falta de grant de execute no pacote para o usuário então

Selecionar tudo

Grant execute on SYSTEM.PKG_TESTE to MyUser;
Se a execução to teste acima funcionar tente executar sem o usuário syste, ou seja, PKG_TESTE.PROCEDURE. Se este não funcionar então seu sinônimo está com problemas
use a consulta abaixo para verificar quais sinonimos você tem

Selecionar tudo

Select * 
from all_synonyms s
where s.SYNONYM_NAME like '%PKG_TESTE%'
Note que você pode até ter criado um sinonimo publico, no entanto se seu usuário já tiver usando este sinonimo apontanto para outro objeto, este(privado) será o válido para ele.

A parte de sinonimos e permissoes do oracle são bem intuitivas e, apesar de duvidarmos as vezes, funcionam bem. Então estude seu caso para ver o que existe de errado.


Boa Sorte
Alexander Vinson

PS: Se o erro persistir poste a mensagem de erro para termos uma idéia melhor do problema.
:)
PS2: Existe também a hipotese de seu usuario ter um objeto com o mesmo nome do synonimo, neste caso este objeto terá prioridade de uso, ou seja ele será chamado no lugar do objeto do system
colored
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 01 Out 2010 8:37 am
Localização: São Paulo - SP
Novo no Fórum :D.

aqui deu esse Erro..

Selecionar tudo

ORA-00990: privilégio não encontrado ou inválido

Selecionar tudo

GRANT EXECUTE SYSTEM.PKG_TESTE TO MyUser;

Selecionar tudo

SELECT * FROM ALL_SYNONYMS WHERE SYNONYM_NAME LIKE '%PKG_TESTE%';
RETORNO ISSO;
OWNER - SYNONYM_NAME - TABLE_OWNER - TABLE_NAME
PUBLIC - PKG_TESTE -SYSTEM - PKG_TESTE


TIPO O NOME DO SINONIMO é O MESMO NOME DO PACKAGE....
colored
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 01 Out 2010 8:37 am
Localização: São Paulo - SP
Novo no Fórum :D.

Bom.. Sinonimo só existe.. esse PKG_TESTE PUBLICO...

em relação a GRANT.. acho q está de boa.. quando eu chamo.. system.package..
ele funciona.. agora quando eu tiro o system. ele não encontra o pacote...

O que falta mesmo é o synonym eu acho...
alexandervinson
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Qua, 17 Nov 2010 8:29 am
Localização: Belem - Para

este grant tem q ser executado com o usuario system...

e desculpe minha falha ao mandar o comando... tem um on no mesmo

Selecionar tudo


Grant execute On SYSTEM.PKG_TESTE TO MyUser;


colored
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 01 Out 2010 8:37 am
Localização: São Paulo - SP
Novo no Fórum :D.

Já fiz esse comando diversar vezes... e até GRANT ALL Tb...
e Não adianta ele não encontra...

To desesperado já kkkkk...
n tenho nem ideia mais o q fazer...
alexandervinson
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Qua, 17 Nov 2010 8:29 am
Localização: Belem - Para

Desculpe novamente...
acabo de perceber que em sua segunda mensagem você passou o erro

Selecionar tudo

"ORA-04063: package body "MyUser.PKG_TESTE" contém erros"

Isto quer dizer que seu usuario tem um pacote com este nome...

provavelmente criado por acidente...
de um drop nele

Selecionar tudo

drop package MyUser.PKG_TESTE;

E tente executa a procedure novamente.

Alexander Vinson
PS: Manda os nomes corretos dos pacotes para que possamos te mandar os comandos
colored
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 01 Out 2010 8:37 am
Localização: São Paulo - SP
Novo no Fórum :D.

JÁ EXCLUI.. mas continua dando o mesmo.. erro...

quais permissões eu preciso pra poder acessar o pacote...

SE EU FIZER...

Selecionar tudo

GRANT ALL ON SYSTEM.PKG_TESTE FOR MyUser
isso já resolveria o problema????
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Bom... humildemente, lá vai uma dica: não crie objetos no SYSTEM. Nunca.

Coloque em outro schema, é para o seu bem.
colored
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 01 Out 2010 8:37 am
Localização: São Paulo - SP
Novo no Fórum :D.

EU CRIARIA EM QUAL SCHEMA POR EXEMPLO...

porque EU PRECISO CRIAR EM 1 E DAR PERMISSÃO A ESSE USUARIO PARA ACESSAR O PACOTE..
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Bom, a princípio, você criaria um usuário (owner) que contenha a aplicação, packages, procedures, talvez tabelas e demais estruturas. Depende muito, há várias possibilidades. Mas uma coisa em comum, colocar seus objetos no System é a última alternativa.

Depois de criada a package, ela funciona se você executa ela com o owner? Ou está com algum erro de compilação?
alexandervinson
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Qua, 17 Nov 2010 8:29 am
Localização: Belem - Para

O que eu considero ideal é ter um(ou mais) usuário(s) que tenham as tabelas e procedimentos, este usuário não deve ter permissão de logar no banco. E um(ou mais) usuário(s) que sejam de aplicação, ou seja, este vai ter permissão de logar no banco, e permissoes para manipular os objetos dos citados anteriormente.

Favor postar a chamada acompanhada do erro para uma (re)análise.
Acompanhados com o nome do usuario logado e o nome do pacote+procedimento chamado para solucionarmos seu problema.

Alex
alexandervinson
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Qua, 17 Nov 2010 8:29 am
Localização: Belem - Para

Suponho que tenhas resolvido o problema
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes