gpt4 book ai didi

mysql - 需要有关在 mysql 中编写复合语句的帮助

转载 作者:行者123 更新时间:2023-11-29 23:15:43 25 4
gpt4 key购买 nike

if条件-mysql中可以写复合语句吗?

它为我返回一个错误,例如:

[Err] 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 'DECLARE n INT unsigned DEFAULT 0;
DECLARE i INT unsigned DEFAULT 0;
DECL' at line 40

请大家帮忙

这是我正在使用的查询

...........................................
IF(tarif='LT')
THEN

CREATE TABLE costSlabs SELECT `Start`,`End`,Cost FROM energy_slabs where SiteId=NEW.SiteID and `Start` < totalUnits;
DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
DECLARE newStart INT;
DECLARE newEnd INT;
DECLARE newCost DOUBLE;
DECLARE finalCost DOUBLE DEFAULT 0;

SELECT COUNT(*) FROM costSlabs INTO n;
SET i=0;
WHILE i<n DO
SELECT `Start`, `End`,Cost INTO newStart,newEnd,newCost FROM costSlabs LIMIT i,1 ;

IF(newEnd<totalUnits)
THEN
SET finalCost = finalCost + ((newEnd-newStart) * newCost);

ELSE
...........................................

最佳答案

IF语句在 MySQL 存储程序(存储过程、函数或触发器)的上下文中有效。在 MySQL 存储程序的上下文之外,它不是有效的 SQL 语句。

我们没有看到这些陈述的上下文,而是基于对NEW.的引用。 在 SQL SELECT 中,没有任何名为 NEW 的表或表别名,我假设此 SQL 位于 CREATE TRIGGER 的上下文中声明。

我怀疑您遇到的问题是由于分号分隔符造成的,它实际上结束了 CREATE TRIGGER陈述。为了创建包含分号字符的触发器,需要指定不同的语句分隔符。例如:

DELIMITER $$

CREATE TRIGGER mytrig
BEFORE INSERT ON mytable
FOR EACH ROW
BEGIN
SET NEW.col1 = 'foo';
SET NEW.col2 = 'bar';
END$$

DELIMITER ;

第一个语句指定 $$将用作结束语句的分隔符。通过该设置,后面的语句将作为单个语句一起读取,直到 $$遇到分隔符。这将结束该语句并允许执行它。这基本上可以防止触发器主体内的分号过早“结束”语句。

语句完成后,您可以将分隔符更改回分号。

问题中发布的 SQL 文本 block 本身无效。我怀疑执行 CREATE TRIGGER 返回了语法错误。陈述,但这只是一个猜测,因为问题中没有足够的上下文来得出结论。

此外,我相信在 MySQL 存储程序(例如 TRIGGER)中,所有 DECLARE语句必须出现在其他语句之前,例如 CREATE TABLE

关于mysql - 需要有关在 mysql 中编写复合语句的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27834069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com