<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	
	>
<channel>
	<title>
	Comentários sobre: Triggers em MySQL &#8211; Definição, Sintaxe e Criação &#8211; 44	</title>
	<atom:link href="https://www.bosontreinamentos.com.br/mysql/mysql-triggers-definicao-sintaxe-e-criacao-44/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bosontreinamentos.com.br/mysql/mysql-triggers-definicao-sintaxe-e-criacao-44/</link>
	<description>Artigos e Tutoriais sobre Desenvolvimento de Software, Bancos de Dados SQL, Linux, Lógica de Programação, Inteligência Artificial, Hardware, Eletrônica, Arduino, Técnicas e Teorias de Estudo e Aprendizagem, Carreira em TI, Ciências Cognitivas, e muito mais!</description>
	<lastBuildDate>Mon, 10 Feb 2020 22:05:44 +0000</lastBuildDate>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.6</generator>
	<item>
		<title>
		Por: Augusto Cesar Nunes		</title>
		<link>https://www.bosontreinamentos.com.br/mysql/mysql-triggers-definicao-sintaxe-e-criacao-44/#comment-29886</link>

		<dc:creator><![CDATA[Augusto Cesar Nunes]]></dc:creator>
		<pubDate>Thu, 07 Mar 2019 19:41:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=1238#comment-29886</guid>

					<description><![CDATA[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&#062; 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  &#039;DOM&#039;) AND (NEW.dia_abreviado  &#039;SEG&#039;) AND (NEW.dia_abreviado  &#039;TER&#039;) AND (NEW.dia_abreviado  &#039;QUA&#039;) AND (NEW.dia_abreviado  &#039;QUI&#039;) AND (NEW.dia_abreviado  &#039;SEX&#039;) AND (NEW.dia_abreviado  &#039;SAB&#039;) THEN
			SIGNAL SQLSTATE &#039;45000&#039; SET MESSAGE_TEXT = &#039;Abreviacao do dia incorreta&#039;;
	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 (&#039;DOM&#039;);
INSERT INTO tbl_teste (dia_abreviado) VALUES (&#039;ABC&#039;);

SELECT * FROM tbl_teste;

As mensagens decorrentes da execução do script são as seguintes:

mysql&#062; SOURCE C:/create_trigger_01.sql
Query OK, 0 rows affected (0.17 sec)

Query OK, 0 rows affected (0.33 sec)

+---------------+------------+------+-----+---------+----------------+
&#124; Field         &#124; Type       &#124; Null &#124; Key &#124; Default &#124; Extra          &#124;
+---------------+------------+------+-----+---------+----------------+
&#124; id            &#124; int(11)    &#124; NO   &#124; PRI &#124; NULL    &#124; auto_increment &#124;
&#124; dia_abreviado &#124; varchar(3) &#124; YES  &#124;     &#124; NULL    &#124;                &#124;
+---------------+------------+------+-----+---------+----------------+
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 &#039;dia_abreviado&#039; in &#039;field list&#039;
ERROR 1054 (42S22): Unknown column &#039;dia_abreviado&#039; in &#039;field list&#039;
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]]></description>
			<content:encoded><![CDATA[<p>Prezado Fábio, quero parabenizá-lo pelos excelentes treinamentos que você disponibiliza, os quais venho acompanhando a bastante tempo e tem me ajudado bastante.</p>
<p>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.</p>
<p>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.</p>
<p>Poderia dar uma ajuda? Onde estou errando?</p>
<p>Segue abaixo todo o script que criei, para sua compreensão:</p>
<p>&#8212;<br />
&#8212; Script para criação e exibição da estrutura da tabela tbl_teste<br />
&#8212; Nome do script: cria_tbl_teste.sql<br />
&#8212;<br />
&#8212; Chamada para execução do script:<br />
&#8212;<br />
&#8212; mysql&gt; SOURCE C:/cria_tbl_teste.sql<br />
&#8212;</p>
<p>DELIMITER $$<br />
DROP TABLE IF EXISTS tbl_teste;</p>
<p>CREATE TABLE tbl_teste (<br />
   id    INT(11) PRIMARY KEY AUTO_INCREMENT,<br />
   dia_abreviado   VARCHAR(3));</p>
<p>DESCRIBE tbl_teste;<br />
$$<br />
DELIMITER ;</p>
<p>&#8212;<br />
&#8212; Cria a PROCEDURE para ser utilizada pela TRIGGER<br />
&#8212;</p>
<p>DELIMITER $$<br />
DROP PROCEDURE IF EXISTS validarDia;</p>
<p>CREATE PROCEDURE validarDia (IN dia_abreviado VARCHAR(3))</p>
<p>BEGIN<br />
	IF (NEW.dia_abreviado  &#8216;DOM&#8217;) AND (NEW.dia_abreviado  &#8216;SEG&#8217;) AND (NEW.dia_abreviado  &#8216;TER&#8217;) AND (NEW.dia_abreviado  &#8216;QUA&#8217;) AND (NEW.dia_abreviado  &#8216;QUI&#8217;) AND (NEW.dia_abreviado  &#8216;SEX&#8217;) AND (NEW.dia_abreviado  &#8216;SAB&#8217;) THEN<br />
			SIGNAL SQLSTATE &#8216;45000&#8217; SET MESSAGE_TEXT = &#8216;Abreviacao do dia incorreta&#8217;;<br />
	END IF;<br />
END<br />
$$<br />
DELIMITER ;</p>
<p>&#8212;<br />
&#8212; TRIGGER que testa o dia quando é feito um INSERT na tabela tbl_teste:<br />
&#8212;<br />
DELIMITER $$<br />
DROP TRIGGER IF EXISTS insertDia;</p>
<p>CREATE TRIGGER insertDia BEFORE INSERT ON tbl_teste FOR EACH ROW<br />
	CALL validarDia(dia_abreviado);<br />
&#8212; END<br />
$$<br />
DELIMITER ;</p>
<p>&#8212;<br />
&#8212; TRIGGER que testa o dia quando é feito um UPDATE na tabela tbl_teste:<br />
&#8212;<br />
DELIMITER $$<br />
DROP TRIGGER IF EXISTS updateDia;</p>
<p>CREATE TRIGGER updateDia BEFORE UPDATE ON tbl_teste FOR EACH ROW<br />
	CALL validarDia(dia_abreviado);<br />
&#8212; END<br />
$$<br />
DELIMITER ;</p>
<p>&#8212;<br />
&#8212; Testa a inserção de dados na tabela tbl_teste:<br />
&#8212;</p>
<p>INSERT INTO tbl_teste (dia_abreviado) VALUES (&#8216;DOM&#8217;);<br />
INSERT INTO tbl_teste (dia_abreviado) VALUES (&#8216;ABC&#8217;);</p>
<p>SELECT * FROM tbl_teste;</p>
<p>As mensagens decorrentes da execução do script são as seguintes:</p>
<p>mysql&gt; SOURCE C:/create_trigger_01.sql<br />
Query OK, 0 rows affected (0.17 sec)</p>
<p>Query OK, 0 rows affected (0.33 sec)</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;-+<br />
| Field         | Type       | Null | Key | Default | Extra          |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;-+<br />
| id            | int(11)    | NO   | PRI | NULL    | auto_increment |<br />
| dia_abreviado | varchar(3) | YES  |     | NULL    |                |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;-+<br />
2 rows in set (0.41 sec)</p>
<p>Query OK, 0 rows affected (0.02 sec)</p>
<p>Query OK, 0 rows affected (0.02 sec)</p>
<p>Query OK, 0 rows affected, 1 warning (0.00 sec)</p>
<p>Query OK, 0 rows affected (0.01 sec)</p>
<p>Query OK, 0 rows affected, 1 warning (0.00 sec)</p>
<p>Query OK, 0 rows affected (0.02 sec)</p>
<p>ERROR 1054 (42S22): Unknown column &#8216;dia_abreviado&#8217; in &#8216;field list&#8217;<br />
ERROR 1054 (42S22): Unknown column &#8216;dia_abreviado&#8217; in &#8216;field list&#8217;<br />
Empty set (0.00 sec)</p>
<p>Agradeceria imensamente qualquer ajuda, pois já pesquisei bastante na Internet, sem sucesso&#8230;</p>
<p>Um grande abraço e no aguardo de um breve contato,</p>
<p>atenciosamente</p>
<p>Augusto Cesar Nunes</p>
]]></content:encoded>
		
			</item>
	</channel>
</rss>
