Jump to content
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.

 

 

Share this post


Link to post
Share on other 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;

 

Share this post


Link to post
Share on other 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;

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By cfreis01
      eu tenho uma tabela  funcionário com uma coluna salário e criei uma nova coluna do tipo salário eu pensei em uma trigger
      para que todas as vezes que um funcionário receba um aumento, nessa nova coluna seja registrada a quantia do último aumento recebido
      mas quando executo o update da erro;
      outra duvida dentro do update como o update sabe que é só deste  funcionario? o que colocar na clausula where dentro da trigger?
      CREATE OR REPLACE TRIGGER new_salario_emp BEFORE UPDATE ON emp FOR EACH ROW -- DECLARE salario number; BEGIN salario := :new.sal - :OLD.sal; -- update emp set old_salario = salario; commit; -- END;  
    • By kaiquefigui
      sempre que uso o comando 'insert into cliente values...' diz que minha query foi atualiza e as linhas foram afetadas porem quando utilizo o comando 'desc cliente' não vejo alterações, como posso resolver esse problema?
      CREATE TABLE CLIENTE( NOME VARCHAR(30), SEXO CHAR(1), CPF CHAR(11), EMAIL VARCHAR(50), TELEFONE VARCHAR(30), ENDEREÇO VARCHAR(100) ); SHOW TABLES; DESC CLIENTE; INSERT INTO CLIENTE VALUES('KAUAN','M','23453678911','KAUAN@HOTMAIL.COM','254896534','ANTONIO HERDEIRO - SÃO PAULO - SP'); INSERT INTO CLIENTE VALUES('ADRIANA','F','24587630894','ADRIANA@HOTMAIL.COM','48652479','ANTONIO HERDEIRO - SÃO PAULO - SP'); INSERT INTO CLIENTE VALUES('KAIQUE','M','34221176809','KAIQUE@HOTMAIL.COM',NULL,'ANTONIO HERDEIRO - SÃO PAULO - SP'); INSERT INTO CLIENTE(NOME,SEXO,CPF,EMAIL,TELEFONE,ENDEREÇO) VALUES('MARCELA','F','15489652011','MARCELO@HOTMAIL.COM','245826157','ANTONIO HERDEIRO - SÃO PAULO - SP');  
    • By ment0r
      Boa tarde amigos, tudo bem? Mais uma vez venho pedir o auxilio de vocês.
       
      Bom, estou desenvolvendo um sistema intranet pra uma empresa (php + firebird) e nele haverá uma página de cadastro de pedido; nela, o usuário digita a data da compra, a data de vencimento e vai listando os produtos - bem simples.
       
      Minha dúvida é a seguinte: como eu faço pra pra inserir vários produtos na mesma página e depois cadastrar tudo de uma vez? Peguei como exemplo uma tela do sistema de um amigo (não pode ser copiado, pois foi desenvolvido em Delphi).
       

       
      O usuário escolhe um produto e insere na lista, escolhe outro e insere na lista e assim por diante. No final ele cadastra todos. Minha dúvida não é nos procedimentos de cadastros (funções de banco e etc) é em como fazer a aparecer essa lista de produtos.
       
      Será que é com Jquey, Javascript... enfim... me deêm uma luz rsrs
       
      Muito obrigado desde já.
       
    • By Robson Freitas
      Tenho uma tabela de cadastro do SQL Server, tenho uma coluna que apresenta o status desse cadastro ('A','I','S','C').
       
      Criei um campo com nome Update_data, que receberá um datatime toda vez que o cliente alterar o status do cadastro. Isso também vale para um insert.
       
      Estou com dúvidas, pois nunca criei uma Trigger em sql server.
       
      Ex: da minha tabela
       ID | Processo | status | Update_data
        1 | A33      | A      | null
      2   | A34      | I      | null
      3    | A55      |     A | null
       
      Não consegui avançar no seguinte exemplo abaixo trigger: 
      CREATE TRIGGER atualizaData
      ON cadastro
      AFTER INSERT,UPDATE
      AS
      IF INSERT OR UPDATE(status)
      BEGIN
      UPDATE cadastro SET Update_data = GETDATE()
      WHERE id = id_que_foi_modifica/inserida
      END
       
      Ao final, será atualizado com a data atual somente se houver modificação ou inserção no campo da situação.
    • By gmadeira
      Boa tarde, tenho 2 tabelas "prodvdarm" que cadastro produtos de ema empresa com:
      codVendedor - int,
      codArmar - int,
      quantidade int,
      valor - numeric 12,2,
      dataentra - data tabela "entradarm"
      codVendedor - int,
      codArmar - int,
      quantidade int,
      valor - numeric 12,2,
       
      Conheço pouco de triggers então pelos exemplos tentei fazer esta que te enviei, preciso de uma para entrar com os dados checar se existe este código vendedor e código armarinho, existindo atualiza(update) a quantidade e o valor - se não existir entra com novos dados(insert) fia assim mais ta dando erro
       
      CREATE DEFINER=`root`@`localhost` TRIGGER `bailledados`.`trg_entradarm_entrada` BEFORE INSERT ON `entradarm` FOR EACH ROW BEGIN declare codVendedor int; declare codArmar int; select codVendedor codArmar from prodvdmat; IF (codVendedor <> new.codVendedor and codArmar <> new.codArmar) then insert into prodvdmat(codVendedor, codArmar, quantidade, valor, datacompra) values (new.codVendedor, new.codArmar, new.quantidade, new.valor, now()); else UPDATE prodvdmat SET quantidade = quantidade + new.Quantidade, valor = valor + new.valor WHERE codVendedor = new.codVendedor and codArmar = new.codArmar; end if; END  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.