— Un trigger BEFORE INSERT pour faire passer transac_status à 1 s’il n’ y a pas d’erreur, c'est-à-dire, en supposant que j’ai bien compris ce que vous dites, si cost_paid >= 15000 et money_transac > 0.
— Un trigger AFTER INSERT pour effectuer les inserts dans la table cfco_ticket_errors. En effet, quand le trigger BEFORE INSERT agit, la colonne id_transac n’est pas encore correctement valorisée : on doit attendre que les inserts dans la table cfco_transaction soient effectifs.
USE temp ;
DROP TABLE IF EXISTS cfco_ticket_errors ;
DROP TABLE IF EXISTS cfco_transaction ;
CREATE TABLE cfco_ticket_errors
(
id_error INT NOT NULL AUTO_INCREMENT,
the_error VARCHAR(100) NOT NULL,
PRIMARY KEY (id_error)
) ;
CREATE TABLE cfco_transaction
(
id_transac INT NOT NULL AUTO_INCREMENT
, cost_paid INT NOT NULL
, transac_status INT NOT NULL DEFAULT '0'
, phone_number INT NOT NULL
, money_transac INT NOT NULL
, total_transac INT NOT NULL
, when_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
, PRIMARY KEY (id_transac)
, UNIQUE KEY phone_number (phone_number)
) ;
COMMIT ;
DELIMITER GO
CREATE TRIGGER cfco_transaction_before_insert_tr BEFORE INSERT ON cfco_transaction
FOR EACH ROW
BEGIN
SET new.transac_status = 0 ;
IF new.cost_paid >= 15000 AND new.money_transac > 0 THEN
SET new.transac_status = 1 ;
END IF ;
END
GO
CREATE TRIGGER cfco_transaction_after_insert_tr AFTER INSERT ON cfco_transaction
FOR EACH ROW
BEGIN
SET @erreur = CONCAT('id_transac = ', new.id_transac, ' : ') ;
IF new.transac_status = 0 THEN
IF new.cost_paid < 15000 THEN
SET @erreur = CONCAT(@erreur, 'cost_paid doit être >= 15000. ') ;
END IF ;
IF new.money_transac = 0 THEN
SET @erreur = CONCAT(@erreur, 'money_transac doit être > 0.') ;
END IF ;
INSERT INTO cfco_ticket_errors (the_error)
SELECT @erreur ;
END IF ;
END
GO
DELIMITER ;
INSERT INTO cfco_transaction (cost_paid, phone_number, money_transac, total_transac)
VALUES (15000, 123456780, 1500, 250) ;
INSERT INTO cfco_transaction (cost_paid, phone_number, money_transac, total_transac)
VALUES (100, 123456781, 1000, 200) ;
INSERT INTO cfco_transaction (cost_paid, phone_number, money_transac, total_transac)
VALUES (1000, 123456782, 1000, 200) ;
INSERT INTO cfco_transaction (cost_paid, phone_number, money_transac, total_transac)
VALUES (0, 123456783, 1000, 200) ;
INSERT INTO cfco_transaction (cost_paid, phone_number, money_transac, total_transac)
VALUES (15000, 123456784, 0, 200) ;
INSERT INTO cfco_transaction (cost_paid, phone_number, money_transac, total_transac)
VALUES (0, 123456785, 0, 200) ;
SELECT * FROM cfco_transaction ;
SELECT * FROM cfco_ticket_errors ;