MySQL – Triggers – Definição, Sintaxe e Criação – 44

Triggers – Definição, Sintaxe e Criação no MySQL

Sobre Fábio dos Reis (1379 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

1 Comentário em MySQL – Triggers – Definição, Sintaxe e Criação – 44

  1. Augusto Cesar Nunes // 07/03/2019 em 16:41 // Responder

    Prezado Fábio, quero parabenizá-lo pelos excelentes treinamentos que você disponibiliza, os quais venho acompanhando a bastante tempo e tem me ajudado bastante.

    Estou aprofundando meus conhecimentos em Banco de Dados, em particular o MySQL, e seguindo o seu curso do mesmo, escrevi duas triggers (uma para BEFORE INSERT e outra para BEFORE UPDATE), e uma STORED PROCEDURE para validar uma entrada de dados antes de gravar em uma tabela.

    A criação da tabela, da STORED PROCEDURE e das TRIGGERS estão funcionando corretamente, porém quando executo o INSERT, é apresentado um erro e não consigo inserir os dados na tabela.

    Poderia dar uma ajuda? Onde estou errando?

    Segue abaixo todo o script que criei, para sua compreensão:


    — Script para criação e exibição da estrutura da tabela tbl_teste
    — Nome do script: cria_tbl_teste.sql

    — Chamada para execução do script:

    — mysql> SOURCE C:/cria_tbl_teste.sql

    DELIMITER $$
    DROP TABLE IF EXISTS tbl_teste;

    CREATE TABLE tbl_teste (
    id INT(11) PRIMARY KEY AUTO_INCREMENT,
    dia_abreviado VARCHAR(3));

    DESCRIBE tbl_teste;
    $$
    DELIMITER ;


    — Cria a PROCEDURE para ser utilizada pela TRIGGER

    DELIMITER $$
    DROP PROCEDURE IF EXISTS validarDia;

    CREATE PROCEDURE validarDia (IN dia_abreviado VARCHAR(3))

    BEGIN
    IF (NEW.dia_abreviado ‘DOM’) AND (NEW.dia_abreviado ‘SEG’) AND (NEW.dia_abreviado ‘TER’) AND (NEW.dia_abreviado ‘QUA’) AND (NEW.dia_abreviado ‘QUI’) AND (NEW.dia_abreviado ‘SEX’) AND (NEW.dia_abreviado ‘SAB’) THEN
    SIGNAL SQLSTATE ‘45000’ SET MESSAGE_TEXT = ‘Abreviacao do dia incorreta’;
    END IF;
    END
    $$
    DELIMITER ;


    — TRIGGER que testa o dia quando é feito um INSERT na tabela tbl_teste:

    DELIMITER $$
    DROP TRIGGER IF EXISTS insertDia;

    CREATE TRIGGER insertDia BEFORE INSERT ON tbl_teste FOR EACH ROW
    CALL validarDia(dia_abreviado);
    — END
    $$
    DELIMITER ;


    — TRIGGER que testa o dia quando é feito um UPDATE na tabela tbl_teste:

    DELIMITER $$
    DROP TRIGGER IF EXISTS updateDia;

    CREATE TRIGGER updateDia BEFORE UPDATE ON tbl_teste FOR EACH ROW
    CALL validarDia(dia_abreviado);
    — END
    $$
    DELIMITER ;


    — Testa a inserção de dados na tabela tbl_teste:

    INSERT INTO tbl_teste (dia_abreviado) VALUES (‘DOM’);
    INSERT INTO tbl_teste (dia_abreviado) VALUES (‘ABC’);

    SELECT * FROM tbl_teste;

    As mensagens decorrentes da execução do script são as seguintes:

    mysql> SOURCE C:/create_trigger_01.sql
    Query OK, 0 rows affected (0.17 sec)

    Query OK, 0 rows affected (0.33 sec)

    +—————+————+——+—–+———+—————-+
    | Field | Type | Null | Key | Default | Extra |
    +—————+————+——+—–+———+—————-+
    | id | int(11) | NO | PRI | NULL | auto_increment |
    | dia_abreviado | varchar(3) | YES | | NULL | |
    +—————+————+——+—–+———+—————-+
    2 rows in set (0.41 sec)

    Query OK, 0 rows affected (0.02 sec)

    Query OK, 0 rows affected (0.02 sec)

    Query OK, 0 rows affected, 1 warning (0.00 sec)

    Query OK, 0 rows affected (0.01 sec)

    Query OK, 0 rows affected, 1 warning (0.00 sec)

    Query OK, 0 rows affected (0.02 sec)

    ERROR 1054 (42S22): Unknown column ‘dia_abreviado’ in ‘field list’
    ERROR 1054 (42S22): Unknown column ‘dia_abreviado’ in ‘field list’
    Empty set (0.00 sec)

    Agradeceria imensamente qualquer ajuda, pois já pesquisei bastante na Internet, sem sucesso…

    Um grande abraço e no aguardo de um breve contato,

    atenciosamente

    Augusto Cesar Nunes

Escreva um comentário

Seu e-mail não será divulgado


*