需要帮助在mysql中编写复合语句

时间:2015-01-08 06:18:17

标签: mysql

是否可以在条件-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
...........................................

1 个答案:

答案 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