Fazer download em ppt, pdf ou txt
Fazer download em ppt, pdf ou txt
Você está na página 1de 11

Banco de dados II

Professora Cristiane de Fátima dos Santos Cardoso

2011/01
Revisão de tópicos

28/06/13
Base de dados Banco
Views

28/06/13
Views

28/06/13
28/06/13
Funções

28/06/13
Procedimentos

28/06/13
exercícios

28/06/13
DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`sp_recursive_start`$$


CREATE PROCEDURE `test`.`sp_recursive_start` (IN in_id INT)
BEGIN
DECLARE v_geracao INT;
SET v_geracao = 1;
SET @@max_sp_recursion_depth = 10;

DROP TEMPORARY TABLE IF EXISTS tmp_recursive;


CREATE TEMPORARY TABLE tmp_recursive (
geracao INT,
id int,
nome VARCHAR(255)
)ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO tmp_recursive (geracao,id,nome)


SELECT v_geracao, id, nome FROM tb_recursive WHERE id = in_id;

CALL sp_recursive(in_id, v_geracao);

SELECT * FROM tmp_recursive;

END$$ 28/06/13
DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`sp_recursive`$$


CREATE PROCEDURE `test`.`sp_recursive` (IN in_id INT, IN in_geracao INT )
BEGIN

DECLARE done BOOLEAN DEFAULT FALSE;


DECLARE v_nome VARCHAR(255);
DECLARE v_id_filho INT;
DECLARE v_geracao INT;

DECLARE cursor_a CURSOR FOR


SELECT id,nome FROM tb_recursive WHERE id_pai = in_id;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE;

OPEN cursor_a;
REPEAT FETCH cursor_a INTO v_id_filho,v_nome;

IF NOT done THEN


INSERT INTO tmp_recursive (geracao,id,nome) VALUE(in_geracao+1, v_id_filho,
v_nome);
CALL sp_recursive (v_id_filho, in_geracao+1);
END IF;

UNTIL done END REPEAT;


CLOSE cursor_a; 28/06/13

END$$

Você também pode gostar