Pular para o conteúdo
  • Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 12 anos, 2 meses atrás por Avatar de Fábio PradoFábio Prado.
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #104451
    Avatar de Leonardo de Oliveira SouzaLeonardo de Oliveira Souza
    Participante

      Ola galera, comecei a ver oracle esse semestre na faculdade, e não estou conseguindo fazer essa trigger rodar

      a função dela é a seguinte: tem uma tabela de compra que tem os campos: valor, desconto e total

      a trigger deve pegar o valor de (valor – desconto) e jogar no total, eu fiz do seguinte jeito

      CREATE OR REPLACE TRIGGER TG_COMPRA_AI
      AFTER INSERT ON COMPRA
      FOR EACH ROW
      BEGIN
      UPDATE COMPRA
      SET
      CPR_TOTAL = CPR_VALOR – CPR_DESCONTO
      WHERE CPR_CODIGO = :OLD.CPR_CODIGO;
      END;

      com esse código, na hora de inserir algum registro da um erro

      alguem sabe o que está errado na trigger?

      #104453
      Avatar de rmanrman
      Participante

        @losam

        Neste caso é interessante disparar a trigger antes de inserir:


        CREATE OR REPLACE TRIGGER TG_COMPRA_AI
        BEFORE INSERT ON COMPRA
        FOR EACH ROW
        BEGIN
        :NEW.CPR_TOTAL := :NEW.CPR_VALOR - :NEW.CPR_DESCONTO;
        END;

        #104455
        Avatar de Fábio PradoFábio Prado
        Participante

          losam,

          Com trigger AFTER… vc naõ consegue alterar dados na mesma tabela.

          Ao invés de criar uma trigger, para vc ver o valor total, no 11G sugiro que a coluna CPR_TOTAL seja uma coluna virtual. Leia https://profissionaloracle.com.br/blogs/ … -virtuais/ para ver como fazer isso!

          []s

          Fábio Prado
          http://www.fabioprado.net

          #104457
          Avatar de Leonardo de Oliveira SouzaLeonardo de Oliveira Souza
          Participante

            rman, obrigado cara, fiz aqui e funcionou

            fbifabio, entendi, vou dar uma olhada no material, obrigado

            #104459
            Avatar de Leonardo de Oliveira SouzaLeonardo de Oliveira Souza
            Participante

              [quote=”fbifabio”:25ttcbts]losam,

              Com trigger AFTER… vc naõ consegue alterar dados na mesma tabela.

              Ao invés de criar uma trigger, para vc ver o valor total, no 11G sugiro que a coluna CPR_TOTAL seja uma coluna virtual. Leia https://profissionaloracle.com.br/blogs/ … -virtuais/ para ver como fazer isso!

              []s

              Fábio Prado
              http://www.fabioprado.net[/quote%5D

              tentei fazer aqui com coluna virtual assim como disse, e funcionou, e achei mais prático e fácil do que usar trigger

              valeu pela dica

              #104461
              Avatar de Fábio PradoFábio Prado
              Participante

                losam,

                Q bom que funcionou. Eu achei fantástico o Oracle implementar colunas virtuais no 11G. Quando eu era programador Dot Net há mais de 7 atrás, eu já criava colunas virtuais na aplicação, agora ficou muito bom poder fazer isso tbém no BD.

                Sempre que possível, evite usar triggers. Muitas vezes existem soluções melhores (como essa)!

                []s
                Fábio Prado
                http://www.fabioprado.net

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