quinta-feira, 18 de fevereiro de 2016

Creating a procedure with a cursor on MySQL


This a very simple example on how to create a procedure using a cursor, in Mysql (or its variants mariadb, percona...etc).

To make it a nice and simple example, I created a new database, with a simple table called tbcadastro. Take a look:


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(); 

Check out my new book about R Language http://www.amazon.com/dp/B00SX6WA06

Nenhum comentário:

Postar um comentário

Leave your comment here!