MYSQL вызывает проблемы - PullRequest
       2

MYSQL вызывает проблемы

0 голосов
/ 23 февраля 2012

Я хочу сделать триггер для этого:

UPDATE formulario 
    SET ano = EXTRACT(year FROM create_date),
    mes = EXTRACT(month FROM create_date) 

Но у меня много проблем с этим. это принято, но не работает или выдает сообщение об ошибке при публикации новых строк. Я хочу вставить create_date и автоматически установить ano и mes. как я могу это сделать?

извините, вот определение триггера:

CREATE TRIGGER `anomes` AFTER INSERT ON `formulario` FOR EACH ROW BEGIN
UPDATE formulario SET ano = EXTRACT(year FROM create_date);
UPDATE formulario SET mes = EXTRACT(month FROM create_date); 
END;

и таблица:

-- Dumping structure for table at.formulario
CREATE TABLE IF NOT EXISTS `formulario` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `uniqid` varchar(38) DEFAULT NULL,
  `create_date` date DEFAULT NULL,
  `ano` int(4) DEFAULT NULL,
  `mes` int(2) DEFAULT NULL,
  `codcliente` int(8) DEFAULT NULL,
  `tipo_act` int(1) DEFAULT NULL,
  `contacto_nome` varchar(50) DEFAULT NULL,
  `contacto_funcao` int(1) DEFAULT NULL,
  `contacto_telefone` varchar(20) DEFAULT NULL,
  `cara_cli_abc` int(1) DEFAULT NULL,
  `cara_cli_estado` int(1) DEFAULT NULL,
  `cara_cli_tipo_est` int(3) DEFAULT NULL,
  `cara_cli_sazonal` int(1) DEFAULT '0',
  `loc_inst_piso` varchar(5) DEFAULT NULL,
  `loc_inst_acesso` int(1) DEFAULT NULL,
  `loc_inst_data_vistoria` date DEFAULT NULL,
  `loc_inst_data_inter` date DEFAULT NULL,
  `loc_inst_time_vistoria_start` time DEFAULT NULL,
  `loc_inst_time_vistoria_end` time DEFAULT NULL,
  `loc_inst_time_inter_start` time DEFAULT NULL,
  `loc_inst_time_inter_end` time DEFAULT NULL,
  `check_list_p_agua` int(1) DEFAULT '0',
  `check_list_t_agua` int(1) DEFAULT '0',
  `check_list_p_dist` varchar(3) DEFAULT NULL,
  `check_list_obs` text,
  `final_obs` text,
  `vendedor` int(4) DEFAULT NULL,
  `dt_aceito` int(1) DEFAULT NULL,
  `bonus` text,
  `anulado` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

1 Ответ

0 голосов
/ 23 февраля 2012

Проблема в том, что вы не можете изменить таблицу, которая вызвала этот триггер.Это ограничение.

Попробуйте использовать триггер BEFORE INSERT и установите новые значения перед вставкой данных.Например:

CREATE TRIGGER anomes
BEFORE INSERT
ON formulario
FOR EACH ROW
BEGIN
  SET NEW.ano = EXTRACT(year FROM NEW.create_date);
  SET NEW.mes = EXTRACT(month FROM NEW.create_date); 
END

И вопрос - почему вы собираетесь хранить эти данные в таблице?Вы можете вычислить его на лету в запросе SELECT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...