Pular para o conteúdo
  • This topic has 6 replies, 3 voices, and was last updated 10 years ago by Avatar de Raphael FernandesRaphael Fernandes.
Viewing 7 posts - 1 through 7 (of 7 total)
  • Author
    Posts
  • #107034
    Avatar de Raphael FernandesRaphael Fernandes
    Participant

      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á!

      #107035
      Avatar de rmanrman
      Participant

        @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.

        #107036
        Avatar de Raphael FernandesRaphael Fernandes
        Participant

          RMAN,

          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 INVALID

          #107037
          Avatar de rmanrman
          Participant

            @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.

            #107038
            Avatar de Raphael FernandesRaphael Fernandes
            Participant

              Realmente 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.

              #107042
              Avatar de Anderson GrafAnderson Graf
              Participant

                @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;

                #107044
                Avatar de Raphael FernandesRaphael Fernandes
                Participant

                  Prezados,

                  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!!

                Viewing 7 posts - 1 through 7 (of 7 total)
                • You must be logged in to reply to this topic.
                plugins premium WordPress