是否可以在条件-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
Sombody请帮忙
这是我正在使用的查询
...........................................
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
...........................................
答案 0 :(得分:0)
IF
语句在MySQL存储程序(存储过程,函数或触发器)的上下文中有效。在MySQL存储程序的上下文之外,它不是一个有效的SQL语句。
我们没有看到这些语句的上下文,而是基于SQL SELECT中对 NEW.
的引用,没有任何名为{{1}的表或表别名我假设这个SQL在NEW
语句的上下文中。
我怀疑你遇到的问题是由于分号分隔符,它有效地结束了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 ;
将用作结束语句的分隔符。使用该集合,以下语句将作为单个语句一起读取,直到遇到$$
分隔符。这将结束声明,并允许它被执行。这基本上可以防止触发器体内的分号过早地结束&#34;声明。
语句完成后,您可以将分隔符更改为分号。
问题中发布的SQL文本块本身无效。我怀疑语法错误是从执行$$
语句返回的,但这只是一个猜测,因为在问题中没有足够的上下文来得出结论。
另外,我相信在MySQL存储的程序(例如TRIGGER)中,所有CREATE TRIGGER
语句必须在之前出现其他语句,例如DECLARE
。