Pular para o conteúdo
  • Este tópico contém 19 respostas, 7 vozes e foi atualizado pela última vez 16 anos, 5 meses atrás por jspaulonci.
Visualizando 15 posts - 1 até 15 (de 20 do total)
  • Autor
    Posts
  • #89723
    airoosp
    Participante

      Boa tarde,

      Alguém sabe como fazer para que uma trigger de insert não permita a inclusão de um registro quando o valor de um determinado campo identifica que o registro deve ser desprezado. (Oracle 9i)

      Por exemplo:

      Se valor = 1 não grava o registro, mas continua o processamento normalmente.

      Obrigado.

      Airton

      #89725
      Rodrigo Mesquita
      Participante

        vc pode fazer assim

        if :new.coluna = 1 Then
        :new.coluna := null;
        End If;

        #89726
        airoosp
        Participante

          Entendi, mas o processo seria não fazer a inclusão do registro e continuar o processamento normal.
          Uma alternativa seria utilizar o raise_application_error mas o processo de inclusão seria interrompido e não é isso que preciso.

          Obrigado.

          Airton

          #89727
          Rodrigo Mesquita
          Participante

            Airton,

            Ai nesse caso o melhor seria voce tentar tratar para que caso o valor fosse o desprezado que nao seja efeituado o insert.

            #89728
            jp_centec
            Participante

              Não seria mais interessante usar uma constraint do tipo check.

              E se você tem esse insert no meio de um procedimento, você trata o erro, eu acho melhor do que ignorar o que o sistema e/ou o usuário estão informando.

              #89729
              Rodrigo Mesquita
              Participante

                O melhor mesmo e tratar no meio do procedimento, pois o check ou o raise vao interromper a execucao exibindo uma mensagem de erro.

                #89730
                airoosp
                Participante

                  Entendi que via trigger não vai funcionar, o melhor é tratar na aplicação e filtrar os registros à serem gravados na base, certo.

                  Obrigado.

                  Airton

                  #89734
                  Ishii
                  Participante

                    Olá,

                    Você pode também criar um raise e na sua tratativa não colocar nada, ai ele não insere e também não retorna nada para a aplicação…

                    []s Ishii

                    #89736
                    airoosp
                    Participante

                      Ishii,

                      Mas o raise vai parar o processo de insert, não é?

                      Airton

                      #89742
                      Ishii
                      Participante

                        Olá,

                        Então acho que não entendi, era para não inserir (parar o insert) a linha ou era para inserir sem os valores?

                        []s Ishii

                        #89744
                        airoosp
                        Participante

                          Os registros estão sendo inseridos na tabela, se um deles tiver por exemplo o conteúdo do campo estado igual a SS, ignorar o registro (não fazer o insert) e continuar o processo para os demais registros.

                          #89745
                          rwarstat
                          Participante

                            Airton,
                            Veja se essa solução resolve o teu problema

                            if variavel valor_indesejado then
                            insere
                            end if;

                            Assim, caso a tua variável seja diferente de 1, o registro será inserido.

                            Abraço,
                            Roberto

                            #89746
                            airoosp
                            Participante

                              O IF pode ser utilizado dentro da trigger before insert da tabela?

                              #89749
                              rwarstat
                              Participante

                                Pode, com certeza. A trigger é um bloco PL/SQL, então é válido todos os tipos de comandos PL/SQL ali dentro.

                                #89750
                                airoosp
                                Participante

                                  Por exemplo na trigger abaixo:

                                  create or replace trigger trg_tabela_teste
                                  before insert on tabela_teste
                                  for each row
                                  begin

                                  if :new.estado = ‘SS’ then

                                  Não inserir o registro ( se utilizar o raise o processo é encerrado )

                                  end if;

                                  end;

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