Cursor MySql - Criando um Procedimento
Estou tentando criar um cursor pela primeira vez. Eu olhei para a documentação, entendo o conceito, mas não consigo fazê-lo ser declarado ...
Estou a usar:
MySql 5.1.41SqlYog como gerente(executando localmente em uma instalação xampp)Mesmo ao copiar e colar o exemplo encontrado emhttp://dev.mysql.com/doc/refman/5.1/en/cursors.html
CREATE PROCEDURE curdemo()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
OPEN cur2;
read_loop: LOOP
FETCH cur1 INTO a, b;
FETCH cur2 INTO c;
IF done THEN
LEAVE read_loop;
END IF;
IF b < c THEN
INSERT INTO test.t3 VALUES (a,b);
ELSE
INSERT INTO test.t3 VALUES (a,c);
END IF;
END LOOP;
CLOSE cur1;
CLOSE cur2;
END;
Eu recebo erros imediatamente: Código do erro: 1064
Você tem um erro na sua sintaxe SQL; verifique o manual que corresponde à versão do servidor MySQL para obter a sintaxe correta perto de '' na linha 3
e muitos outros seguindo,
isso não faz nenhum sentido para mim, alguma alma amável pode me ajudar por favor?
Obrigado
Então, eu tenho a consulta de exemplo para trabalhar (graças a ajreal), com a redefinição do DELIMITER. Mas quando executo minha consulta:
DELIMITER##
CREATE PROCEDURE RetiraPoints()
BEGIN
DECLARE userid BIGINT;
DECLARE done INT DEFAULT 0;
DECLARE cur CURSOR FOR SELECT uid FROM viewpoints;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur;
read_loop: LOOP
FETCH cur INTO userid;
IF done THEN
LEAVE read_loop;
END IF;
INSERT INTO points (iduser, points, pointcat) VALUES (uid, -1, 1), (userid, -1, 2), (userid, -1, 3), (userid, -1, 4), (userid, -1, 5), (userid, -1, 6);
END LOOP;
CLOSE cur;
END;##
eu recebo: Código de erro: 1064
Você tem um erro na sua sintaxe SQL; verifique o manual que corresponde à versão do servidor MySQL para a sintaxe correta a ser usada perto de 'DECLARE done INT DEFAULT 0; DECLARAR CUR CURSOR PARA SELECIONAR uid DE pontos de vista; 'na linha 1
meu deus, isso é difícil ...