CREATE TABLE temp (tid VARCHAR(10), carparkid VARCHAR(10), time DATETIME, hours INT, minutes INT, per_entry DECIMAL(4,2) DEFAULT '0.00', first_hour DECIMAL(4,2) DEFAULT '0.00', hourly DECIMAL (4,2) DEFAULT '0.00', every_30min DECIMAL (4,2) DEFAULT '0.00', minute DECIMAL (4, 3) DEFAULT '0.00', start_time TIME, end_time TIME);
CREATE TABLE temp_seq
(id INT(10) AUTO_INCREMENT, PRIMARY KEY(id));
DELIMITER //
DROP TRIGGER IF EXISTS temp_insert;
CREATE TRIGGER temp_insert
BEFORE INSERT ON temp
FOR EACH ROW
BEGIN
INSERT INTO temp_seq VALUES (NULL);
SET NEW.tid = CONCAT('TID', LPAD(LAST_INSERT_ID(), 5, '0'));
END//
DELIMITER ;
DELIMITER //
DROP TRIGGER IF EXISTS calculate_charge;
CREATE TRIGGER `calculate_charge`
AFTER INSERT ON temp
FOR EACH ROW
BEGIN
UPDATE invoice L
SET L.final_charges = NEW.per_entry + NEW.first_hour + ((NEW.hours – 1) * NEW.hourly) + (((NEW.minutes – 60 ) / 30 ) * NEW.every_30min) + (NEW.minutes * NEW.minute)
WHERE L.tid = NEW.tid;
END
//
DELIMITER ;
CREATE TABLE invoice
(tid VARCHAR(10), userid VARCHAR(10), final_charges DECIMAL(6,2));
CREATE TABLE invoice_seq
(id INT(10) AUTO_INCREMENT, PRIMARY KEY(id));
DELIMITER //
DROP TRIGGER IF EXISTS invoice_insert;
CREATE TRIGGER invoice_insert
BEFORE INSERT ON invoice
FOR EACH ROW
BEGIN
INSERT INTO invoice_seq VALUES (NULL);
SET NEW.tid = CONCAT('TID', LPAD(LAST_INSERT_ID(), 5, '0'));
END//
DELIMITER ;
我正在尝试使用触发器calculate_charges计算发票中的值,其中tid和uid已由另一个触发器预设。但经过多次调试尝试后,该值仍为null。一个灵魂可以启发我吗?
MariaDB [carparkful]> select*from invoice;
+----------+----------+---------------+
| tid | userid | final_charges |
+----------+----------+---------------+
| TID00001 | UID00003 | NULL |
| TID00002 | UID00002 | NULL |
| TID00003 | UID00001 | NULL |
+----------+----------+---------------+
3 rows in set (0.00 sec)