我必须在 UPDATE TRIGGER 内的 UPDATE 中使用视图(尚未创建,因为在该 UPDATE TRIGGER 中需要它)。
所以这是我的代码:
CREATE TRIGGER lunghezza_sentiero_datoderivato_UPDATE2
AFTER UPDATE ON TAPPA
FOR EACH ROW
BEGIN
CREATE VIEW tempoOLD_NULL(IDsentiero, tempo) AS
SELECT IDsentiero, tempo
FROM SENTIERO
WHERE tempo IS NULL and SENTIERO.IDsentiero IN (SELECT DISTINCT IDsentiero
FROM SENTIERO__HA__TAPPA AS sht
WHERE NEW.IDtappa=sht.IDtappa);
CREATE VIEW lunghezzaOLD_NULL(IDsentiero, lunghezza) AS
SELECT IDsentiero, lunghezza
FROM SENTIERO
WHERE lunghezza IS NULL and SENTIERO.IDsentiero IN (SELECT DISTINCT IDsentiero
FROM SENTIERO__HA__TAPPA AS sht
WHERE NEW.IDtappa=sht.IDtappa);
IF (NEW.lunghezza<>OLD.lunghezza) and (NEW.lunghezza is not null) THEN
UPDATE SENTIERO
SET lunghezza=lunghezza - OLD.lunghezza + NEW.lunghezza
WHERE IDsentiero IN (SELECT DISTINCT IDsentiero
FROM SENTIERO__HA__TAPPA AS sht
WHERE NEW.IDtappa=sht.IDtappa) and IDsentiero NOT IN (SELECT IDsentiero
FROM lunghezzaOLD_NULL);
UPDATE SENTIERO
SET lunghezza=NEW.lunghezza
WHERE IDsentiero IN (SELECT IDsentiero
FROM lunghezzaOLD_NULL);
END IF;
当我评论两个 CREATE VIEW都运行时......但我需要那个意见......所以,请帮助我!(在触发器之外创建视图?但我需要在每次更新时创建一个视图,因为 NULL 值会随着时间而变化)
根据要求提供表格和示例的附录:
CREATE TABLE IF NOT EXISTS `SENTIERO` (
`IDsentiero` INT(11) NOT NULL COMMENT 'identificativo del sentiero' ,
`lunghezza` FLOAT NULL COMMENT 'dato derivato' ,
`tempo` FLOAT NULL COMMENT 'dato derivato' ,
PRIMARY KEY (`IDsentiero`) );
CREATE TABLE IF NOT EXISTS `TAPPA` (
`IDtappa` INT(11) NOT NULL COMMENT 'identificativo tappa' ,
`lunghezza` FLOAT NULL COMMENT 'Lunghezza espressa in km' ,
`tempo` FLOAT NULL COMMENT 'La quantità di ore stimate per arrivare alla tappa' ,
PRIMARY KEY (`IDtappa`) );
CREATE TABLE IF NOT EXISTS `SENTIERO__HA__TAPPA` (
`IDtappa` INT(11) NOT NULL ,
`IDsentiero` INT(11) NOT NULL ,
PRIMARY KEY (`IDtappa`, `IDsentiero`) );
一个“TAPPA”可以包含在一个或多个“SENTIERO”中,一个“SENTIERO”包含一个或多个“TAPPA”。
每个“SENTIERO”都有其一个或多个“TAPPA”的“tempo”和“lunghezza”之和。因此,当 'TAPPA' 发生更新时,如果该 'TAPPA' 的 'tempo' 和 'lunghezza '发生变化,我想重新计算一个或多个'SENTIERO'更新后的 'tempo' 和 'lunghezza' 'TAPPA'相关。
看,“SENTIERO”有自己的“TAPPA”的总和
SENTIERO | SENTIERO_HA_TAPPA | TAPPA
IDsentiero tempo lunghezza | IDsentiero IDtappa | IDtappa tempo lunghezza
0 3 20 | 0 1 | 1 3 20
1 8 35 | 1 1 | 2 5 15
| 1 2 |