【问题标题】:Error in syntax of stored procedure存储过程语法错误
【发布时间】:2018-05-12 16:33:21
【问题描述】:
DELIMITER //
CREATE  PROCEDURE final_arrest ()
AS 
cursor c_final_arrest is 
select greatest(Week 1,Week 2)as a ,
greatest(Week 1,Week 3) as b ,
greatest(Week 2,Week 3) as c
from arrest
for update;
c_a number;
c_b number;
c_c number;
c_sum number;
c_avg number;
begin
open c_final_arrest;
loop
fetch c_final_arrest into c_a,c_b,c_c;
exit when c_final_arrest % notfound;
if(c_a != c_b)then
c_sum := c_a + c_b;
else
c_sum := c_a + c_c;
end if;
c_avg := c_sum/2;
update arrest set Avg=c_avg
where current of c_final_arrest;
end loop;
close c_final_arrest;
end //
DELIMITER ;

谁能帮我解决这个问题..!!我无法在 mysql 中创建此过程....不断收到错误

1064 - 您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在 'AS 附近使用的正确语法

光标 c_final_arrest 是 选择最大(第 1 周,第 2 周)作为 , 最大(第 2 行的 W'

我不知道该怎么办...帮助

如果有人可以提供替代代码,那就太好了...!!!

【问题讨论】:

  • 在字段上放置`符号
  • 还是同样的错误
  • 这是什么? “AS cursor c_final_arrest is”我不认为它应该在那里
  • 第一个错误是缺少BEGIN;稍后您会丢失DECLARE。

标签: mysql stored-procedures mariadb


【解决方案1】:

我已经有一段时间没有编写存储过程了 - 但我会看看以下内容:

1) 仔细查看间距 - 即将 "greatest(Week 1,Week 2)as" 更改为 "greatest(Week 1, Week 2) as"

2) "a" 可以保留 - 我会使用更具描述性的列名 3) 列名“第 n 周”包含一个空格。您可能需要在列名周围加上引号 "" 或方括号 [],例如 "greatest([Week 1], [Week 2]) as"

【讨论】:

  • True - 这是编译器首先确定存在问题的地方。对我来说,这表明问题出在该行的某个地方 - 但编译器注意到问题的地方不是必需的。
猜你喜欢
  • 2011-04-18
  • 2012-04-12
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多