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.
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