синтаксическая ошибка в MySQL во время определения триггера - PullRequest
0 голосов
/ 29 сентября 2011

Я пытаюсь использовать триггер, определенный следующим образом:

-- the table
CREATE TABLE codici_ddt(
id_ordine VARCHAR(15) NOT NULL,
id_invoice VARCHAR(15) NOT NULL,
ddt_numero INT(8) NOT NULL,
fatturazione DATE NOT NULL,
ddt VARCHAR(20) NOT NULL,
FOREIGN KEY(id_ordine) REFERENCES ordini_dal_web(id_ordine),
PRIMARY KEY(id_ordine)
);

--the_trigger

DELIMITER $$

CREATE TRIGGER genera_numero_ddt BEFORE INSERT ON codici_ddt FOR EACH ROW
BEGIN
  DECLARE ultimo_ddt INT(8);

  SELECT COALESCE(max(ddt_numero),1) INTO ultimo_ddt 
  FROM codici_ddt
  WHERE data_fatturazione >= MAKEDATE(YEAR(NEW.data_fatturazione)  ,1) 
    AND data_fatturazione <  MAKEDATE(YEAR(NEW.data_fatturazione)+1,1);

  SET NEW.ddt_numero = (ultimo_ddt+1)
  SET NEW.ddt = CONCAT(NEW.ddt_numero,'/',(SUBSTRING(SUBSTRING_INDEX(NEW.data_fatturazione,'-',1),-2)),'c');
 END $$

DELIMITER ;

сообщение, возвращаемое из mysql:

1064 - у вас ошибка в синтаксисе SQL;проверьте, что

соответствует версии вашего сервера MySQL, чтобы узнать правильный синтаксис, который можно использовать рядом с 'SET NEW.ddt = CONCAT (NEW.ddt_numero,' / ', (SUBSTRING (SUBSTRING_INDEX (NEW.data_fatt') в строке11

КОНКАТ должен быть прав, где моя ошибка?

большое спасибо!

Ответы [ 2 ]

2 голосов
/ 29 сентября 2011

Вы скучаете по ';' в конце строки.

  SET NEW.ddt_numero = (ultimo_ddt+1);
0 голосов
/ 29 сентября 2011

Отсутствует точка с запятой.Также вы ссылаетесь на data_fatturazione вместо просто fatturazione.

Попробуйте это:

DELIMITER $$



CREATE TRIGGER genera_numero_ddt BEFORE INSERT ON codici_ddt FOR EACH ROW

BEGIN

DECLARE ultimo_ddt INT(8);


SELECT COALESCE(max(ddt_numero),1) INTO ultimo_ddt    FROM codici_ddt

WHERE fatturazione >= MAKEDATE(YEAR(NEW.fatturazione)  ,1) 

AND fatturazione <  MAKEDATE(YEAR(NEW.fatturazione)+1,1);


SET NEW.ddt_numero = (ultimo_ddt+1);

SET NEW.ddt = CONCAT(NEW.ddt_numero,'/',(SUBSTRING(SUBSTRING_INDEX(NEW.fatturazione,'-',1),-2)),'c');

END $$



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