1
resposta

Trigger para um valor específico

Existe a possibilidade de criar um trigger só q para um valor específico e não apenas para o próprio insert? Por exemplo, ao invés de deletar a tabela inteira para cada valor, deletar somente o valor correspondente a um campo especifíco, no caso do vittorino, a data. Ou, por exemplo, só dar um trigger se alguma variavel passe de algum valor.

1 resposta

Oii Luis, como você está?

Peço desculpas pela demora em obter um retorno.

Uma TRIGGER é disparada no momento em que uma tabela sofre alteração dos dados, seja um INSERT, UPDATE ou DELETE.

Para fazer com que ela seja aplicada apenas se passar de algum valor específico, podemos adicionar uma condição dentro dela através da cláusula IF. De todo modo, a TRIGGER será disparada, mas só aplicará a alteração se respeitar a condição.

Supondo que estamos cadastrando os colaboradores de uma empresa no banco de dados e temos uma estrutura formada por salário, nome e quantidade vendida, como mostro abaixo:

CREATE TABLE COLABORADORES
(ID SERIAL PRIMARY KEY, SALARIO FLOAT, NOME VARCHAR(50), QTD_VENDIDA INTEGER);

O nosso objetivo é aumentar o salário do colaborador que for cadastrado se ele já tiver vendido mais de 100 unidades dos produtos. Nesse caso, veja que não queremos aplicar algo na tabela inteira, apenas se respeitar a condição. Para isso, a TRIGGER ficará da seguinte maneira:

DELIMITER //
CREATE TRIGGER TG_AUMENTA_SALARIO BEFORE INSERT ON COLABORADORES
 FOR EACH ROW
 BEGIN
    IF (NEW.QTD_VENDIDA > 100) THEN
        SET NEW.SALARIO = NEW.SALARIO + (NEW.SALARIO * 0.15);
    END IF;
 END//

Através do código acima verificamos se o valor da quantidade vendida é maior que 100 e caso seja, aumentamos o salário do colaborador em 15%.

Então, supondo que temos as seguintes inserções:

INSERT INTO COLABORADORES
    (SALARIO, NOME, QTD_VENDIDA) 
VALUES 
    (1100.00, 'Paulo Garcia', 250),
    (5000.00, 'Sthe Feliciano', 65),
    (3500.00, 'João Miranda', 110),
    (150.00, 'Millena Dutra', 10),
    (345.00, 'Maria Samantha', 15);

Como a quantidade vendida dos colaboradores Paulo e João ultrapassam 100 unidades, o salário de ambos são aumentados em 15%, resultando no valor mostrado na tabela abaixo:

IDSALARIONOMEQTD_VENDIDA
11265Paulo Garcia250
25000Sthe Feliciano65
34025João Miranda110
4150Millena Dutra10
5345Maria Samantha15

Neste exemplo foi utilizado a TRIGGER para o INSERT, mas a ideia se repete para casos de DELETE e UPDATE.

Qualquer dúvida fico à disposição.

Grande abraço e bons estudos!