【问题标题】:How to declare cursor in phpmyadmin?如何在 phpmyadmin 中声明游标?
【发布时间】:2018-05-29 20:06:44
【问题描述】:

当我添加此代码时出现错误,我无法修复它。

DECLARE c1 cursor FOR SELECT i FROM integers;
OPEN c1;
FETCH c1 INTO L1;
FETCH c1 INTO L2;
FETCH c1 INTO L3;
FETCH c1 INTO L4;
FETCH c1 INTO L5;
FETCH c1 INTO L6;
CLOSE c1;    

以下是完整代码。如果没有上面的代码,程序将执行并从整数表中返回六行没有重复数字,我想将其写入 L1、L2、L3、L4、L5、L6 并稍后插入表 kupony。 'howMany' 是 IN 过程参数。

DELIMITER $$

CREATE PROCEDURE addTickets (IN howMany INT)
BEGIN

DECLARE L1 INT default 0;
DECLARE L2 INT default 0;
DECLARE L3 INT default 0;
DECLARE L4 INT default 0;
DECLARE L5 INT default 0;
DECLARE L6 INT default 0;
DECLARE count1 INT;
set count1 = 0;


while count1 < howMany DO
DECLARE c1 FOR SELECT i FROM integers WHERE i BETWEEN 1 AND 49 ORDER BY RAND() LIMIT 6;
OPEN c1;
FETCH c1 INTO L1;
FETCH c1 INTO L2;
FETCH c1 INTO L3;
FETCH c1 INTO L4;
FETCH c1 INTO L5;
FETCH c1 INTO L6;
CLOSE c1;    
INSERT INTO kupony VALUES(NULL, 1, L1, L2, L3, L4, L5, L6, -1, '2018-01-01', -1);
set count1 = count1 + 1;
end while;

END$$

DELIMITER ;

【问题讨论】:

  • 请与我们分享错误的性质和/或错误消息。
  • #1064 - 你的语法有问题 next 'DECLARE c1 cursor FOR SELECT i FROM integers;打开 c1;将 c1 提取到 L1 中; FETC' 在第 17 行

标签: mysql cursor procedure declare


【解决方案1】:

您必须在嵌套光标周围放置一个BEGIN ... END; 块。

DELIMITER $$

CREATE PROCEDURE addTickets (IN howMany INT)
BEGIN

DECLARE L1 INT default 0;
DECLARE L2 INT default 0;
DECLARE L3 INT default 0;
DECLARE L4 INT default 0;
DECLARE L5 INT default 0;
DECLARE L6 INT default 0;
DECLARE count1 INT default 0;


while count1 < howMany DO
BEGIN
DECLARE c1 CURSOR FOR SELECT i FROM integers WHERE i BETWEEN 1 AND 49 ORDER BY RAND() LIMIT 6;
OPEN c1;
FETCH c1 INTO L1;
FETCH c1 INTO L2;
FETCH c1 INTO L3;
FETCH c1 INTO L4;
FETCH c1 INTO L5;
FETCH c1 INTO L6;
CLOSE c1;    
INSERT INTO kupony VALUES(NULL, 1, L1, L2, L3, L4, L5, L6, -1, '2018-01-01', -1);
set count1 = count1 + 1;
END;
end while;

END$$

DELIMITER ;

【讨论】:

  • #1064 - 在第 16 行的下一个“DECLARE c1 FOR SELECT i FROM integers WHERE i BETWEEN 1 AND 49 ORDER BY RAND() L”中你的语法有问题
  • @gushy22:请编辑您的问题并包含整个CREATE PROCEDURE 声明。
  • @gushy22:对不起,我想我错过了你想在这里做的事情,所以我之前的编辑没用。我又编辑了。希望这次我能理解你的意图。
  • 非常感谢。它现在正在工作。编辑:你之前的评论也很好:)
猜你喜欢
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
相关资源
最近更新 更多