Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Latorre

Validação em Trigger

Recommended Posts

Olá, estou com uma dúvida e não consigo encontrar uma solução,

preciso criar uma trigger que verifique se já existe esse campo inserido em uma outra tabela, caso não exista ele faz o insert

 

o meu insert está dessa forma:

 

CREATE OR REPLACE TRIGGER "SCO_TRG_GERA_SENHA"
AFTER UPDATE on laudo_paciente
REFERENCING NEW AS N OLD AS A
FOR EACH ROW
BEGIN

insert into 
       sco_laudo(nr_prescricao, 
                 nr_senha, 
                 dt_validade)
       values    (:N.nr_prescricao, 
                  DBMS_RANDOM.STRING('x',8), 
                  sysdate);
end;

Como faço pra fazer uma verificação se existe um valor igual de nr_prescrição na tabela sco_laudo?

Porque se existir não posso dar um insert, pois é um numero único.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver dessa forma

 

CREATE OR REPLACE TRIGGER "SCO_TRG_GERA_SENHA"
AFTER UPDATE on laudo_paciente

FOR EACH ROW

DECLARE 
vNR_PRESCRICAO number(14);

BEGIN

IF (:OLD.DT_LIBERACAO <> :NEW.DT_LIBERACAO) or (:NEW.DT_LIBERACAO is not null) THEN

  SELECT count(nr_prescricao) 
  INTO   vNR_PRESCRICAO
  FROM   sco_laudo 
  WHERE  nr_prescricao = :NEW.nr_prescricao;

  IF (vNR_PRESCRICAO = 0 ) THEN

    insert into sco_laudo(nr_prescricao, nr_senha,dt_validade)
           values(:NEW.nr_prescricao, DBMS_RANDOM.STRING('x',8), sysdate);
           
  END IF;

END IF;

end;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra solução

 

CREATE OR REPLACE TRIGGER "SCO_TRG_GERA_SENHA"
AFTER UPDATE on laudo_paciente
REFERENCING NEW AS N OLD AS A
FOR EACH ROW
BEGIN
  BEGIN
    insert into
           sco_laudo(nr_prescricao,
                     nr_senha,
                     dt_validade)
           values    (:N.nr_prescricao,
                      DBMS_RANDOM.STRING('x',8),
                      sysdate);
  EXCEPTION
    WHEN DUP_VAL_ON_INDEX THEN
      NULL;--FAZ NADA
    WHEN OTEHRS THEN
      RAISE;--RAISE NO ERRO    
  END;  
end;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Luiz Henrique
      Olá,
       
      Preciso fazer uma inserção no DB de registros referente a pagamentos, quando for no crédito será realizado o insert com sua respectiva data de compensação e valor da parcela exemplo:
       3 parcelas de 100.00 e cada registro em seu devido mês:
      INSERT INTO tabela (valor, data) VALUES (100, 2022-08-17),(100, 2022-09-17),(100, 2022-10-17) É mais eficiente fazer da forma acima ou colocar 3 INSERT?
      Ou existe forma melhor de fazer isso?
       
      Obrigado.,
       
    • Por dfoliveira82
      Bom dia senhores,
       
      sou novo no Oracle, antes trabalhava com SQL SERVER, e me deparei com algo que ja estou a horas tentando solucionar mas nao consegui.
      Nessa Trigger que vou postar, quando mando compilar ela, fala que esta faltando uma virgula, apos o values, mas nao precisa dela e nao acho onde pode ser essa virgula faltante.
      CREATE OR REPLACE TRIGGER JOBS_CL_INSERE_USUARIO AFTER INSERT OR UPDATE OF EXPORTADA_AVA ON SITE_USUARIOS REFERENCING NEW AS NEW BEGIN INSERT INTO BLACKBEAN.TBL_USERS VALUES (NULL, 'INSERT', NULL, 'db', '0', '0', '0', TO_CHAR(:NEW.CPF), MD5(:NEW.CPF||'port@l'), TO_CHAR(:NEW.CPF), SUBSTRING(:NEW.NOME, 1, INSTR(:NEW.NOME, ' ')-1), SUBSTRING(:NEW.NOME, INSTR(:NEW.NOME, ' ')+1, LEN(:NEW.NOME)), 'email@email.com', NULL, NULL, DATE_TO_UNIX_TS(SYSDATE), NULL, NULL); END; / Se alguem puder me ajudar agradeceria.
    • Por Carlos Antoliv
      Senhores, bom dia.
       
      tenho um campo status. Então, a ideia é mudar o status. Consigo alterar o status quando necessário. Daí, pensei em todas vez que alterar, salvar o id do usuário, data, hora, o último status alterado...
      consigo fazer isso com INSERT, depois do UPDATE.
       
      Nao uso trigger. Até tentei fazer, mas não saiu como eu queria.
       
      Então, para os maiores entendedores do assunto, a melhor prática seria a TRIGGER ou INSERT ? Melhor prática ou o que mais funciona na prática ?
       
      Alguém poderia dissertar sobre isso ?
      Vlw..abço
    • Por mateus.andriollo
      Gostaria de saber se alguém tem uma trigger para fazer log de qualquer tipo de transação de dados em qualquer tabela do banco. Porém, preciso carregar um campo UserName que será setado a cada conexão via login php
      SET @UserName = 'ZeBala' Achei vários exemplos porém tenho q criar um trigger para cada tabela
       
      CREATE TRIGGER roles_audit_au AFTER UPDATE ON `<nome_tabela>` Existe uma forma de não ser direcionada?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.