cursores mysql 5.1
preciso construir um cursor para acumular valores em determinada coluna, estou utilizando os exemplos dos tutoriais (veja abaixo) e recebo erro de sintaxe(1064- na linha create procedure...). alguma dica ?
CREATE DATABASE TUTORIAL_CURSOR;
USE TUTORIAL_CURSOR;
CREATE TABLE VEICULOS(
VEICULO varchar(32) NOT NULL,
KILOMETRAGEM int NOT NULL
);
INSERT INTO VEICULOS (VEICULO, KILOMETRAGEM) VALUES ('Carro 1', '5230');
INSERT INTO VEICULOS (VEICULO, KILOMETRAGEM) VALUES ('Carro 2', '7800');
INSERT INTO VEICULOS (VEICULO, KILOMETRAGEM) VALUES ('Carro 3', '16540');
INSERT INTO VEICULOS (VEICULO, KILOMETRAGEM) VALUES ('Carro 4', '32230');
DROP PROCEDURE IF EXISTS TUTORIAL_CURSOR.SomaKilometragem;
DELIMITER $$
CREATE PROCEDURE TUTORIAL_CURSOR.SomaKilometragem (OUT resultado INT)
BEGIN
-- Definição de variáveis utilizadas na Procedure
DECLARE existe_mais_linhas INT DEFAULT 0;
DECLARE kilometros INT DEFAULT 0;
DECLARE total_de_kilometros INT DEFAULT 0;
-- Definição do cursor
DECLARE meuCursor CURSOR FOR SELECT KILOMETRAGEM FROM VEICULOS;
-- Definição da variável de controle de looping do cursor
DECLARE CONTINUE HANDLER FOR NOT FOUND SET existe_mais_linhas=1;
-- Abertura do cursor
OPEN meuCursor;
-- Looping de execução do cursor
meuLoop: LOOP
FETCH meuCursor INTO kilometros;
-- Controle de existir mais registros na tabela
IF existe_mais_linhas = 1 THEN
LEAVE meuLoop;
END IF;
-- Soma a kilometragem do registro atual com o total acumulado
SET total_de_kilometros = total_de_kilometros + kilometros;
-- Retorna para a primeira linha do loop
END LOOP meuLoop;
-- Setando a variável com o resultado final
SET resultado = total_de_kilometros;
END $$
DELIMITER ;
CALL SomaKilometragem(@variavel_temporaria);
SELECT @variavel_temporaria;
CREATE DATABASE TUTORIAL_CURSOR;
USE TUTORIAL_CURSOR;
CREATE TABLE VEICULOS(
VEICULO varchar(32) NOT NULL,
KILOMETRAGEM int NOT NULL
);
INSERT INTO VEICULOS (VEICULO, KILOMETRAGEM) VALUES ('Carro 1', '5230');
INSERT INTO VEICULOS (VEICULO, KILOMETRAGEM) VALUES ('Carro 2', '7800');
INSERT INTO VEICULOS (VEICULO, KILOMETRAGEM) VALUES ('Carro 3', '16540');
INSERT INTO VEICULOS (VEICULO, KILOMETRAGEM) VALUES ('Carro 4', '32230');
DROP PROCEDURE IF EXISTS TUTORIAL_CURSOR.SomaKilometragem;
DELIMITER $$
CREATE PROCEDURE TUTORIAL_CURSOR.SomaKilometragem (OUT resultado INT)
BEGIN
-- Definição de variáveis utilizadas na Procedure
DECLARE existe_mais_linhas INT DEFAULT 0;
DECLARE kilometros INT DEFAULT 0;
DECLARE total_de_kilometros INT DEFAULT 0;
-- Definição do cursor
DECLARE meuCursor CURSOR FOR SELECT KILOMETRAGEM FROM VEICULOS;
-- Definição da variável de controle de looping do cursor
DECLARE CONTINUE HANDLER FOR NOT FOUND SET existe_mais_linhas=1;
-- Abertura do cursor
OPEN meuCursor;
-- Looping de execução do cursor
meuLoop: LOOP
FETCH meuCursor INTO kilometros;
-- Controle de existir mais registros na tabela
IF existe_mais_linhas = 1 THEN
LEAVE meuLoop;
END IF;
-- Soma a kilometragem do registro atual com o total acumulado
SET total_de_kilometros = total_de_kilometros + kilometros;
-- Retorna para a primeira linha do loop
END LOOP meuLoop;
-- Setando a variável com o resultado final
SET resultado = total_de_kilometros;
END $$
DELIMITER ;
CALL SomaKilometragem(@variavel_temporaria);
SELECT @variavel_temporaria;
Edson Fernandes.
Curtidas 0
Respostas
Josimar Reis
20/06/2010
E ae cara blz???
Sou novo no site, mas o primeiro tutorial que me interessei o foi este.
vamos ao assunto....
ow eu copie o seu codigo e o resultado foi este
============================
@resultado = '61800'
============================
e não apareceu nenhum erro!
Sou novo no site, mas o primeiro tutorial que me interessei o foi este.
vamos ao assunto....
ow eu copie o seu codigo e o resultado foi este
============================
@resultado = '61800'
============================
e não apareceu nenhum erro!
GOSTEI 0
Edson Fernandes.
20/06/2010
blz !
qual a versao do mysql que esta usando ?
linux ou ruindows ?
qual a versao do mysql que esta usando ?
linux ou ruindows ?
GOSTEI 0
José
20/06/2010
Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
GOSTEI 0