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

      Olá, preciso criar uma trigger em para deletar faturas indevidas no momento de sua inserção. Como ao tenho acesso à aplicação, não tenho como impedir a inserção dos dados.
      Criei uma tabela chamada TB_LOG_PLACA(campos, ID, Placa, Data, Status CPF), nela estou gravando a data de insercao e update das placas de veiculos cadastrados.
      Tenho uma tabela chamada TB_CELULAR_PLACA(campos em comum com a tabela TB_LOG_PLACA o campo placa e CPF) que gera faturas para essas placas, porem como ate então não havia uma data incial de insercao de placa ou inativacao de placas, o banco de dados estava gerando faturas anteriores a data de insercao da placa(baseado na data do cadastro do usuário e não da inserção de uma placa nova) e posteriores a inativacao da placa, por esse motivo foi criada essa tabela de log TB_LOG_PLACA. Na tabela TB_CELULAR_PLACA eu preciso criar uma trigger que faca o seguinte:

      primeira situacao: se aparecer uma placa nova e a fatura gerada for com data menor que a data da mesma placa na tabela log, então delete-a,
      segunda situacao: se aparecer uma fatura com data maior que a inativacao da placa (campo Status), delete-a

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

        cdavid30, vc já criou trigger alguma vez? conhece PL/SQL?

        att,

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

        #104450
        Avatar de CamilaCamila
        Participante

          Fabio, tudo bem?

          é a segunda vez que eu faço uma trigger, estou conhecendo Oracle agora. A trigger que eu criei para essa situação após insert é a seguinte:

          BEGIN

          DELETE FROM TB_PAGAMENTO P
          JOIN TB_LOG_PLACA L ON P.PLACA = L.PLACA
          WHERE L.STATUS_PLACA = 1
          AND L.DATA = (SELECT MAX(L2.DATA)
          FROM TB_LOG_PLACA L2
          WHERE L2.STATUS_PLACA = 0 AND L2.PLACA = L.PLACA) > P.PG_DT_FAT

          DELETE FROM TB_PAGAMENTO P
          JOIN TB_LOG_PLACA L ON P.PLACA = L.PLACA
          WHERE L.STATUS_PLACA = 0
          AND L.DATA = (SELECT MAX(L2.DATA)
          FROM TB_LOG_PLACA L2
          WHERE L2.STATUS_PLACA = 0 AND L2.PLACA = L.PLACA) < P.PG_DT_FAT

          END;

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

            passe o código completo da trigger

            vc está tendo algum erro?

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