- This topic has 6 replies, 3 voices, and was last updated 10 years ago by Raphael Fernandes.
-
AuthorPosts
-
16 de outubro de 2014 at 6:36 pm #107034Raphael FernandesParticipant
Pessoal,
Estou compilando um package em um banco de dados Oracle 10g, e o mesmo vem apresentando o seguinte erro:
PLS-00905: o objeto DIARIO.DIARIO é inválido
O trecho de código é o seguinte:
(…)
IF V_PERIODOS IS NOT NULL THEN
V_QTDE_P := DIARIO.Pkg_Funcoes_Utilitarias.Fc_Conta_Elementos(V_PERIODOS, ‘#’);
WHILE V_CONT <= V_QTDE_P LOOP (...) Se for alterada a instrução de: V_QTDE_P := DIARIO.Pkg_Funcoes_Utilitarias.Fc_Conta_Elementos(V_PERIODOS, '#'); para: V_QTDE_P := Pkg_Funcoes_Utilitarias.Fc_Conta_Elementos(V_PERIODOS, '#'); O pacote compila sem erro. Esse mesmo procedimento está funcionando em outro ambiente. Alguém já passou por isso e/ou pode me ajudar? Grato desde já!16 de outubro de 2014 at 9:13 pm #107035rmanParticipant@ROAF
Quando você acessa a FUNCTION desta forma:
DIARIO.Pkg_Funcoes_Utilitarias.Fc_Conta_Elementos(V_PERIODOS, ‘#’);
Você está acesssando a FUNCTION Fc_Conta_Elementos do PACKAGE Pkg_Funcoes_Utilitarias do SCHEMA DIARIO.
Quando é omitido o SCHEMA você está acessando a função que está no seu prório SCHEMA.
Verique no próprio SCHEMA a existência do PACKAGE Pkg_Funcoes_Utilitarias e da FUNCTION Fc_Conta_Elementos. É por isso que ao remover o SCHEMA o erro para de ocorrer.
16 de outubro de 2014 at 9:42 pm #107036Raphael FernandesParticipantRMAN,
Estou compilando o pacote com o próprio owner (DIARIO).
Fiz uma consulta nos objetos do meu banco com um usuário com mais privilégios, e me retornou apenas o pacote (spec e body) do meu schema (DIARIO).
SELECT owner,
object_name,
object_type,
status
FROM all_objects
WHERE UPPER (object_name) LIKE ‘%PKG_VALIDACAO_LICEN%’;OWNER OBJECT_NAME OBJECT_TYPE STATUS
—————————— ————————————————- ——-
DIARIO PKG_VALIDACAO_LICENCAS PACKAGE VALID
DIARIO PKG_VALIDACAO_LICENCAS PACKAGE BODY INVALID16 de outubro de 2014 at 11:20 pm #107037rmanParticipant@ROAF
Se você está com o próprio DIARIO não deveria fazer diferença entre especificar ou não o SCHEMA.
Verifique se não existe um SYNONYM. Isso pode explicar por que com o SCHEMA da erro. O SYNONYM pode estar apontando para outro SCHEMA.
17 de outubro de 2014 at 12:38 am #107038Raphael FernandesParticipantRealmente não deveria fazer diferença se estou logado com o OWNER.
Já havia olhado se não existem outros objetos com o mesmo nome, não tem mesmo!!
Como os desenvolvedores estavam precisando fazer manutenção no procedimento, sugeri temporariamente que retirassem o schema antes do nome do objeto. O procedimento compilou e estão usando normalmente.
Mas preciso descobrir o que está acontecendo pois senão o pacote será versionado no repositório dessa forma, e propagado para os ambientes de homologação e produção. (o que não é problema, exceto pela “grande alteração” na comparação dos objetos antes e depois da manutenção).
@RMAN, obrigado mais uma vez pela presteza das respostas. Vou continuar pesquisando e testando a solução. Se pensar em algo diferente me avisa.
21 de outubro de 2014 at 3:01 am #107042Anderson GrafParticipant@ROAF, tudo bem?
por favor, poste as saídas conforme o exemplo abaixo para tentarmos ajudá-lo.
SQL> alter package ANDERSON.EXEMPLO compile body;Warning: Package Body altered with compilation errors.
SQL> show error package body anderson.exemplo
Errors for PACKAGE BODY ANDERSON.EXEMPLO:LINE/COL ERROR
-------- -----------------------------------------------------------------
77/1 PL/SQL: SQL Statement ignored
77/41 PL/SQL: ORA-00942: table or view does not exist
SQL> select text from dba_source where owner='ANDERSON'
and name='EXEMPLO' and type='PACKAGE BODY' and line=77;TEXT
--------------------------------------------------------------------------------
select count(*) into wk_qtd from schema.package_exemplo;
22 de outubro de 2014 at 11:28 pm #107044Raphael FernandesParticipantPrezados,
Obrigado pela ajuda de todos.
Acabei achando a solução, e para variar o problema foi gerado pela própria equipe de desenvolvimento.O que aconteceu foi que um desenvolvedor criou um objeto do tipo FUNCTION da seguinte forma:
CREATE OR REPLACE FUNCTION DIARIO.111554225 (
P_CADASTRO
(…)Como o nome do objeto começava com número, o Oracle compilou o objeto com o nome DIARIO, tanto que quando consultei a DBA_OBJECTS buscando por DIARIO (select * from dba_objects where object_name=’DIARIO’; ), me veio esse objeto.
Resultado, alterei o nome do objeto e recompilei todos os procedimentos novamente.
Tudo ok!
Obrigado a todos pelas colaborações!!
-
AuthorPosts
- You must be logged in to reply to this topic.