在触发器中创建视图

编程入门 行业动态 更新时间:2024-10-25 08:16:54
本文介绍了在触发器中创建视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我必须在UPDATE TRIGGER内的UPDATE中使用视图(尚未创建,因为在UPDATE TRIGGER中需要它).

I have to use a view (not already created, because it's needed within that UPDATE TRIGGER) in an UPDATE inside an 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值会随时间变化)

When i COMMENT both 2 CREATE VIEW all runs... but i need that views.. so, please help me! (create view outside the trigger? but i need to create a view on every update, because the NULL value change along the time)

表和示例的附录:

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"已更改,我想重新计算其中一个的"tempo"和"lunghezza"或更多'SENTIERO'与更新的'TAPPA'相关. 看到,'SENTIERO'具有自己的'TAPPA'

One 'TAPPA' can be included in one or more 'SENTIERO', one 'SENTIERO' includes one or more 'TAPPA'. Each 'SENTIERO' has the sum of 'tempo' and 'lunghezza' of its one or more 'TAPPA'. So when occurs an update on 'TAPPA', if 'tempo' and 'lunghezza' of that 'TAPPA' have changed, i want to re-calculate the 'tempo' and 'lunghezza' for the one or more 'SENTIERO' the updated 'TAPPA' is related to. See, 'SENTIERO' has the SUM of its own '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 |

推荐答案

请勿为此目的使用视图.这不是他们想要的.

Don't use views for this purpose. It's not what they're intended for.

相反,了解如何正确连接表:

Instead, learn how to join tables properly:

CREATE TRIGGER lunghezza_sentiero_datoderivato_UPDATE2 AFTER UPDATE ON TAPPA FOR EACH ROW IF (NEW.lunghezza <> OLD.lunghezza) AND (NEW.lunghezza IS NOT NULL) THEN -- note that this condition will not be entered if `OLD.lunghezza` IS NULL -- irrespective of NEW.lunghezza. Perhaps you want to use the NULL-safe -- equality operator <=> instead? UPDATE SENTIERO AS s JOIN SENTIERO__HA__TAPPA AS sht USING (IDsentiero) SET s.lunghezza = CASE WHEN s.lunghezza IS NULL THEN NEW.lunghezza ELSE s.lunghezza - OLD.lunghezza + NEW.lunghezza END WHERE sht.IDtappa = NEW.IDtappa; END IF

更多推荐

在触发器中创建视图

本文发布于:2023-10-21 17:30:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1514885.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:视图   器中

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!