Pular para o conteúdo
Visualizando 9 posts - 1 até 9 (de 9 do total)
  • Autor
    Posts
  • #90377
    Anakim
    Participante

      Eu sei que eu posso chamar uma procedure dentro de uma trigger no oracle.
      No postgre eu consigo pegar dentro de uma procedure associada a uma trigger os valores NEW e OLD, então, gostaria de saber se tem como fazer isso no oracle.
      Dei uma procurada na net e não achei nada parecido com isso. Só gostaria de confirmar se esta funcionalidade existe no oracle ou não.

      #90379
      rwarstat
      Participante

        Anakim,

        O quê tu pdoe fazer é passar o NEW ou OLD que tu precisa como parâmetro para a proceduere.
        Acredito que tu chamar de dentro da procedure diretamente as estruturas NEW e OLD não seja possível.

        Abraço,
        Roberto

        #90380
        Anakim
        Participante

          E como eu faria isso? O que a minha procedure tem que receber um record?
          E teria como retornar o NEW na procedure por exemplo?

          #90383
          rwarstat
          Participante

            As estruturas NEW e OLD não podem ser alteradas. Elas representam os valores novos e antigos, respectivamente, de um registro na tua tabela.

            Tu precisa fazer esse processo de dentro da trigger? Não pode ser feito após o insert/update/delete?
            Da maneira como tu está propondo, chamar uma procedure de dentro de uma trigger, o processamento pdoe ficar lento e caso dê algum erro na procedure será dado um rollback na tua operação.

            Para passar o NEW ou OLD como parâmetro, nunca precisei fazer isso passando toda a estrutura, só com um campo, faz da seguinte maneira:

            procedure(:old.campo);

            #90385
            Anakim
            Participante

              Estava querendo fazer esta procedure para ficar uma coisa genérica sempre que uma tabela for receber um insert ou um update executaria este procedure.
              Isso seria para atualizar campos dates, pelo visto vou ter que fazer uma trigger para cada tabela.
              Valeu pela ajuda.

              #90386
              rwarstat
              Participante

                Explica melhor o quê tu gostaria de fazer que o pessoal do fórum pode te ajudar a pensar em uma outra solução.

                #90387
                Anakim
                Participante

                  Aqui na empresa não gostamos muito de deletar dados. Então na maioria das nossas tabelas temos os seguintes campos:
                  – date_inserted;
                  – date_updated;
                  – date_deleted;

                  Em relação ao date_inserted o valor default dele é sysdate.
                  E em relação aos outros dois campos no postgre fazemos da seguinte maneira, criamos uma trigger genérica e ela preenche este campos para gente.
                  Estava tentando fazer isso no oracle, só que não estou vendo uma maneira “fácil” de se fazer isso. Eu consigo usar esta solução no postgre porque eu consigo pegar o new dentro da procedure.

                  #90388
                  rwarstat
                  Participante

                    Até onde vai os meus parcos conehcimentos, não conheço como fazer uma trigger genérica no Oracle. Até por que isso seria um tanto quanto estranho.

                    Tanto para update como delete, não poderia fazer conforme o código abaixo?

                    update tabela
                    set date_deleted = sysdate
                    where chave

                    Acredito que isso seja simples, uma vez que vocês não deletam realmente o registro, só o marcam como tal. Para o update é a mesma coisa, quando atualziar o registro já atualzia a coluna correspondente.

                    #90389
                    Anakim
                    Participante

                      Desta maneira vou precisar repetir este código para todas as tabelas.
                      Vou tentar fazer uma procedure que faça isso para mim se der certo posto o resultado aqui.
                      Valeu pela ajuda.

                    Visualizando 9 posts - 1 até 9 (de 9 do total)
                    • Você deve fazer login para responder a este tópico.