- Este tópico contém 19 respostas, 7 vozes e foi atualizado pela última vez 16 anos, 5 meses atrás por
jspaulonci.
-
AutorPosts
-
17 de setembro de 2009 às 12:25 am #89723
airoosp
ParticipanteBoa 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
17 de setembro de 2009 às 2:12 am #89725Rodrigo Mesquita
Participantevc pode fazer assim
if :new.coluna = 1 Then
:new.coluna := null;
End If;17 de setembro de 2009 às 2:27 am #89726airoosp
ParticipanteEntendi, 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
17 de setembro de 2009 às 2:32 am #89727Rodrigo Mesquita
ParticipanteAirton,
Ai nesse caso o melhor seria voce tentar tratar para que caso o valor fosse o desprezado que nao seja efeituado o insert.
17 de setembro de 2009 às 2:33 am #89728jp_centec
ParticipanteNã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.
17 de setembro de 2009 às 2:38 am #89729Rodrigo Mesquita
ParticipanteO melhor mesmo e tratar no meio do procedimento, pois o check ou o raise vao interromper a execucao exibindo uma mensagem de erro.
17 de setembro de 2009 às 2:42 am #89730airoosp
ParticipanteEntendi que via trigger não vai funcionar, o melhor é tratar na aplicação e filtrar os registros à serem gravados na base, certo.
Obrigado.
Airton
17 de setembro de 2009 às 6:04 am #89734Ishii
ParticipanteOlá,
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
17 de setembro de 2009 às 4:18 pm #89736airoosp
ParticipanteIshii,
Mas o raise vai parar o processo de insert, não é?
Airton
17 de setembro de 2009 às 5:36 pm #89742Ishii
ParticipanteOlá,
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
17 de setembro de 2009 às 5:42 pm #89744airoosp
ParticipanteOs 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.
17 de setembro de 2009 às 5:42 pm #89745rwarstat
ParticipanteAirton,
Veja se essa solução resolve o teu problemaif variavel valor_indesejado then
insere
end if;Assim, caso a tua variável seja diferente de 1, o registro será inserido.
Abraço,
Roberto17 de setembro de 2009 às 5:47 pm #89746airoosp
ParticipanteO IF pode ser utilizado dentro da trigger before insert da tabela?
17 de setembro de 2009 às 6:18 pm #89749rwarstat
ParticipantePode, com certeza. A trigger é um bloco PL/SQL, então é válido todos os tipos de comandos PL/SQL ali dentro.
17 de setembro de 2009 às 6:28 pm #89750airoosp
ParticipantePor exemplo na trigger abaixo:
create or replace trigger trg_tabela_teste
before insert on tabela_teste
for each row
beginif :new.estado = ‘SS’ then
Não inserir o registro ( se utilizar o raise o processo é encerrado )
end if;
end;
-
AutorPosts
- Você deve fazer login para responder a este tópico.