开发者

syntax error in mysql during tringger definition

开发者 https://www.devze.com 2023-04-09 00:46 出处:网络
I\'m trying to use a trigger defined as follows -- the table CREATE TABLE codici_ddt( id_ordine VARCHAR(15) NOT NULL,

I'm trying to use a trigger defined as follows

-- 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)
);

--开发者_如何学Gothe_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 ;

the message returned from mysql is

1064 - You have an error in your SQL syntax; check the manual that

corresponds to your MySQL server version for the right syntax to use near 'SET NEW.ddt = CONCAT(NEW.ddt_numero,'/',(SUBSTRING(SUBSTRING_INDEX(NEW.data_fatt' at line 11

the CONCAT should be right, where is my error?

many thanks!


You miss ';' at the end of line.

  SET NEW.ddt_numero = (ultimo_ddt+1);


Missing semi-colon. Also you are referencing data_fatturazione instead of just fatturazione.

Try this:

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 ;
0

精彩评论

暂无评论...
验证码 换一张
取 消