Baixe o app para aproveitar ainda mais
Prévia do material em texto
Prof. Thales Farias Duarte Banco de Dados II Handlers ● Esta instrução especifica handlers para lidar com uma ou mais condições. Se uma dessas condições ocorrer, a instrução especificada é executada. ● Para um handler CONTINUE, a execução das rotinas atuais continuam depois da instrução handler. Para um handler EXIT, a execução da rotina atual é terminada. Handlers Cursor ● Cursores ● O cursor é uma instrução SELECT que será acessada linha a linha através de um laço While e alguns comandos específicos para cursores e é utilizado normalmente em procedimentos armazenados (stored procedures). Cursor Ordem da Declaração Exemplo CREATE FUNCTION Media() RETURNS double BEGIN DECLARE soma DOUBLE DEFAULT 0; DECLARE n INTEGER DEFAULT 0; DECLARE sal DOUBLE; DECLARE cur CURSOR FOR SELECT f.salario FROM funcionarios f; DECLARE EXIT HANDLER FOR NOT FOUND RETURN soma/n; OPEN cur; LOOP FETCH cur INTO sal; SET soma = soma+sal; SET n = n+1; END LOOP; END Exemplo DELIMITER // CREATE FUNCTION Media() RETURNS double BEGIN DECLARE soma DOUBLE DEFAULT 0; DECLARE n INTEGER DEFAULT 0; DECLARE sal DOUBLE; DECLARE cur CURSOR FOR SELECT f.salario FROM funcionarios f; DECLARE EXIT HANDLER FOR NOT FOUND RETURN soma/n; OPEN cur; LOOP FETCH cur INTO sal; SET soma = soma+sal; SET n = n+1; END LOOP; END // DELIMITER ; Exemplo CREATE PROCEDURE aumento() BEGIN DECLARE cod INTEGER; DECLARE sal DECIMAL(9,2); DECLARE fim BOOLEAN DEFAULT FALSE; DECLARE cur CURSOR FOR SELECT f.codigo, f.salario FROM funcionarios f; DECLARE CONTINUE HANDLER FOR NOT FOUND SET fim = TRUE; OPEN cur; daAumento: LOOP FETCH cur INTO cod, sal; IF fim THEN LEAVE daAumento; END IF; UPDATE funcionarios SET salario = sal + 60 WHERE codigo = cod; END LOOP; END Exemplo DELIMITER // CREATE PROCEDURE aumento() BEGIN DECLARE cod INTEGER; DECLARE sal DECIMAL(9,2); DECLARE fim BOOLEAN DEFAULT FALSE; DECLARE cur CURSOR FOR SELECT f.codigo, f.salario FROM funcionarios f; DECLARE CONTINUE HANDLER FOR NOT FOUND SET fim = TRUE; OPEN cur; daAumento: LOOP FETCH cur INTO cod, sal; IF fim THEN LEAVE daAumento; END IF; UPDATE funcionarios SET salario = sal + 60 WHERE codigo = cod; END LOOP; END // DELIMITER ; Exercícios Crie um procedimento que de um aumento de 10% para cada funcionários que possui mais de 5 dependentes. Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11
Compartilhar