1
I have two database, when a Trigger is fired it generates an Insert in another database is a trick to generate log :
The scheme is this: local name database has a table called tab_manifesto and an Insert is made on it and Trigger fires an Insert in the local_log.log_tab_manifesto database.
Below is the construction and an example of the error when making the Insert.
USE local_log;
delimiter $$
DROP TABLE IF EXISTS `local_log`.`log_tab_manifesto`$$
CREATE TABLE `log_tab_manifesto` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_nome` varchar(30) NOT NULL,
`data_hora` datetime NOT NULL,
`host` varchar(45) NOT NULL,
`operacao` varchar(2) NOT NULL COMMENT 'I-Insert, D-Delete, U-Update',
`manifesto_id` int(11) DEFAULT NULL,
`man_id` int(11) DEFAULT NULL,
`uni_id` int(11) DEFAULT NULL,
`filial_id` int(11) DEFAULT NULL COMMENT 'numero da carta frete de cada filial, exemplo foz_id',
`mot_mot_id` int(11) DEFAULT NULL,
`mot_est_id` int(11) DEFAULT NULL,
`veic_id` int(11) DEFAULT NULL,
`man_data` date DEFAULT NULL,
`man_origem` varchar(45) DEFAULT NULL,
`man_destino` varchar(45) DEFAULT NULL,
`man_status` varchar(1) DEFAULT '0' COMMENT 'null ou 0 = Viajando / 1 = chada / 2 = descarregando / 3 = finalizado',
`man_ordem_chegada` datetime DEFAULT NULL COMMENT 'Ordena a Chegada dos Manifestos',
`man_cancelado` varchar(1) DEFAULT NULL,
`man_descarga` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8$$
-- CRIANDO trigger PARA A TABELA - triggers SÃO CRIADAS NA DATABASE DE ***PRODUÇÃO***
DELIMITER $$
USE `local`$$
DROP TRIGGER IF EXISTS `local`.`tg_tab_manifesto_after_i`$$
CREATE
DEFINER=`root`@`127.0.0.1`
TRIGGER `local`.`tg_tab_manifesto_after_i`
AFTER INSERT ON `local`.`tab_manifesto`
FOR EACH ROW
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION /*DECLARAR EXECEÇÃO*/
RESIGNAL SQLSTATE '21S01' SET MESSAGE_TEXT = 'TRIGGER tg_tab_manifesto_after_i';/*RETORNA O NOME DA TRIGGER EM CASO DE ERRO*/
/*LOG - INSERIR NOVO REGISTRO DE LOG */
set @id = (select ifnull(max(id)+1,1) from local_log.log_tab_manifesto);
insert into local_log.log_tab_manifesto
values(
@id,
substring_index(session_user(),'@',1),
now(),
substring_index(session_user(),'@',-1),
'I',
NEW.`log_tab_manifesto`.`manifesto_id`,
NEW.`log_tab_manifesto`.`man_id`,
NEW.`log_tab_manifesto`.`uni_id`,
NEW.`log_tab_manifesto`.`filial_id`,
NEW.`log_tab_manifesto`.`mot_mot_id`,
NEW.`log_tab_manifesto`.`mot_est_id`,
NEW.`log_tab_manifesto`.`veic_id`,
NEW.`log_tab_manifesto`.`man_data`,
NEW.`log_tab_manifesto`.`man_origem`,
NEW.`log_tab_manifesto`.`man_destino`,
NEW.`log_tab_manifesto`.`man_status`,
NEW.`log_tab_manifesto`.`man_ordem_chegada`,
NEW.`log_tab_manifesto`.`man_cancelado`,
NEW.`log_tab_manifesto`.`man_descarga`
);
end$$
The error happens here at this link below:
INSERT INTO
tab_manifesto(
uni_id,
filial_id,
mot_mot_id,
mot_est_id,
veic_id,
man_origem,
man_destino
) values (
1,
NULL,
30,
NULL,
327,
'FOZ',
' SAO PAULO'
);
Error Code: 1644. TRIGGER tg_tab_manifesto_after_i
Could someone help me fix this mistake ?
The mistake is not in that line ?
TRIGGER
local.
tg_tab_manifesto_after_i``– Diego Souza
What version of Mysql?
– Jéf Bueno