sexta-feira, 24 de maio de 2013

Criando uma procedure com CURSOR no MySQL

Através deste exemplo simples, vou demonstrar como criar uma procedure com cursor no MySQL. Para que o exemplo fique o mais prático possível, proponho a criação de um banco de dados teste e uma tabela com dados fictícios denominada tbcadastro.  Observe p script:

CREATE DATABASE teste; 

USE teste; 

CREATE TABLE `tbcadastro` 
  ( 
     `codigo` INT(11) NOT NULL auto_increment, 
     `descricao` VARCHAR(150) DEFAULT NULL, 
     `valorvenda` DECIMAL(18, 2) DEFAULT NULL,`ativo` INT(1) DEFAULT '1', 
     PRIMARY KEY (`codigo`) 
  ); 

INSERT INTO `tbcadastro` 
            (`codigo`,`descricao`,`valorvenda`,`ativo`) 
VALUES      (1,'Samsung Galaxy S III',1999.00,1); 

INSERT INTO `tbcadastro` 
            (`codigo`,`descricao`,`valorvenda`,`ativo`) 
VALUES      (2,'Apple IPHONE 5',2199.00,1); 

INSERT INTO `tbcadastro` 
            (`codigo`,`descricao`,`valorvenda`,`ativo`) 
VALUES      (3,'Samsung Galaxy Tab II',1999.00,1); 

INSERT INTO `tbcadastro` 
            (`codigo`,`descricao`,`valorvenda`,`ativo`) 
VALUES      (4,'Motorola Xoom',1099.00,1); 

INSERT INTO `tbcadastro` 
            (`codigo`,`descricao`,`valorvenda`,`ativo`) 
VALUES      (5,'Dell Ultrabook 14´',2499.00,1); 

INSERT INTO `tbcadastro` 
            (`codigo`,`descricao`,`valorvenda`,`ativo`) 
VALUES      (6,'ASUS Ultrabook 14´',2599.00,1); 

INSERT INTO `tbcadastro` 
            (`codigo`,`descricao`,`valorvenda`,`ativo`) 
VALUES      (7,'Fragmentadora Clone',1099.00,0); 

INSERT INTO `tbcadastro` 
            (`codigo`,`descricao`,`valorvenda`,`ativo`) 
VALUES      (8,'Suporte para Notebook',1099.00,1); 

DROP PROCEDURE IF EXISTS spcursor; 

DELIMITER |;
CREATE PROCEDURE spcursor() 
begin 
  DECLARE fim INT DEFAULT false; 

  DECLARE produto VARCHAR(150); 

  DECLARE bloco CURSOR FOR 
    SELECT descricao 
    FROM   tbcadastro; 

  DECLARE CONTINUE handler 
  FOR NOT found 
    SET fim = TRUE; 

  CREATE temporary TABLE teste 
    ( 
       descricao VARCHAR(150) 
    ) 

; 
  open bloco; 

  READ_LOOP: 
LOOP 
    FETCH bloco INTO produto; 
    INSERT INTO teste 
    VALUES      (produto); 
    IF fim THEN 
      LEAVE read_loop; 
    end IF; 
  end LOOP; 

  close bloco; 

  SELECT * 
  FROM   teste; 

DROP temporary TABLE teste; 
end; 
|

CALL spcursor(); 

--
Leia o meu livro sobre T-SQL http://www.erica.com.br/detalhes.asp?cod=4537

2 comentários:

Leave your comment here!