Prévia do material em texto
17/10/2023, 18:14 Procedures SQL: executando código no MySQL: Aula 5 - Atividade 10 Consolidando o seu conhecimento | Alura - Cursos o… https://cursos.alura.com.br/course/mysql-procedures/task/56840 1/11 10 Consolidando o seu conhecimento Chegou a hora de você seguir todos os passos realizados por mim durante esta aula. Caso já tenha feito, excelente. Se ainda não, é importante que você execute o que foi visto nos vídeos para poder continuar com a próxima aula. 1) Quando o resultado de um SELECT possui mais de uma linha não podemos atribuí-lo a uma variável usando o SELECT INTO . Para isso temos que usar o Cursor para receber valores vindos de uma tabela, com uma ou mais colunas. 2) Vamos criar uma SP que utilize Cursor. Digite e execute: USE sucos_vendas; DROP procedure IF EXISTS cursor_pri DELIMITER $$ USE sucos_vendas$$ CREATE PROCEDURE `cursor_primeiro_c BEGIN 79% DISCORD ALURA FÓRUM DO CURSO VOLTAR PARA DASHBOARD MODO NOTURNO 106.3k xp ATIVIDADES 10 DE 11 https://cursos.alura.com.br/course/mysql-procedures https://discord.gg/Q35hcA5EFG https://cursos.alura.com.br/forum/curso-mysql-procedures/todos https://cursos.alura.com.br/dashboard https://cursos.alura.com.br/user/kiasbarreto https://cursos.alura.com.br/dashboard 17/10/2023, 18:14 Procedures SQL: executando código no MySQL: Aula 5 - Atividade 10 Consolidando o seu conhecimento | Alura - Cursos o… https://cursos.alura.com.br/course/mysql-procedures/task/56840 2/11 COPIAR CÓDIGO COPIAR CÓDIGO DECLARE vNome VARCHAR(50); DECLARE c CURSOR FOR SELECT NOME OPEN c; FETCH c INTO vNome; SELECT vNome; FETCH c INTO vNome; SELECT vNome; FETCH c INTO vNome; SELECT vNome; FETCH c INTO vNome; SELECT vNome; CLOSE c; END$$ DELIMITER ; 3) Note que cada linha da seleção é atribuída a variável vNome , uma de cada vez. Execute: call cursor_primeiro_contato; 79% DISCORD ALURA FÓRUM DO CURSO VOLTAR PARA DASHBOARD 106.3k xp ATIVIDADES 10 DE 11 https://cursos.alura.com.br/course/mysql-procedures https://discord.gg/Q35hcA5EFG https://cursos.alura.com.br/forum/curso-mysql-procedures/todos https://cursos.alura.com.br/dashboard https://cursos.alura.com.br/user/kiasbarreto https://cursos.alura.com.br/dashboard 17/10/2023, 18:14 Procedures SQL: executando código no MySQL: Aula 5 - Atividade 10 Consolidando o seu conhecimento | Alura - Cursos o… https://cursos.alura.com.br/course/mysql-procedures/task/56840 3/11 4) Na SP acima executamos um Cursos controlado onde sabíamos quantos elementos o mesmo tinha. Mas, normalmente, não sabemos esta informação. Por isso usamos sempre o Cursos combinados com um Looping. Digite e execute a criação da SP abaixo: USE sucos_vendas; DROP procedure IF EXISTS cursor_loo DELIMITER $$ USE `sucos_vendas`$$ CREATE PROCEDURE `cursor_looping` ( BEGIN DECLARE fim_do_cursor INT DEFAUL DECLARE vNome VARCHAR(50); 79% DISCORD ALURA FÓRUM DO CURSO VOLTAR PARA DASHBOARD 106.3k xp ATIVIDADES 10 DE 11 https://cursos.alura.com.br/course/mysql-procedures https://discord.gg/Q35hcA5EFG https://cursos.alura.com.br/forum/curso-mysql-procedures/todos https://cursos.alura.com.br/dashboard https://cursos.alura.com.br/user/kiasbarreto https://cursos.alura.com.br/dashboard 17/10/2023, 18:14 Procedures SQL: executando código no MySQL: Aula 5 - Atividade 10 Consolidando o seu conhecimento | Alura - Cursos o… https://cursos.alura.com.br/course/mysql-procedures/task/56840 4/11 COPIAR CÓDIGO COPIAR CÓDIGO DECLARE c CURSOR FOR SELECT NOME DECLARE CONTINUE HANDLER FOR NOT OPEN c; WHILE fim_do_cursor = 0 DO FETCH c INTO vNome; IF fim_do_cursor = 0 THEN SELECT vNome; END IF; END WHILE; CLOSE c; END$$ DELIMITER ; 5) Executando a SP: call cursor_looping; Teremos diversos resultados em diferentes consultas. 79% DISCORD ALURA FÓRUM DO CURSO VOLTAR PARA DASHBOARD 106.3k xp ATIVIDADES 10 DE 11 https://cursos.alura.com.br/course/mysql-procedures https://discord.gg/Q35hcA5EFG https://cursos.alura.com.br/forum/curso-mysql-procedures/todos https://cursos.alura.com.br/dashboard https://cursos.alura.com.br/user/kiasbarreto https://cursos.alura.com.br/dashboard 17/10/2023, 18:14 Procedures SQL: executando código no MySQL: Aula 5 - Atividade 10 Consolidando o seu conhecimento | Alura - Cursos o… https://cursos.alura.com.br/course/mysql-procedures/task/56840 5/11 6) O Cursor pode suportar mais de uma coluna. Crie a SP abaixo: USE sucos_vendas; DROP procedure IF EXISTS looping_cu DELIMITER $$ USE sucos_vendas$$ CREATE PROCEDURE `looping_cursor_mu BEGIN DECLARE fim_do_cursor INT DEFAULT DECLARE vCidade, vEstado, vCep VA DECLARE vNome, vEndereco VARCHAR( DECLARE c CURSOR FOR SELECT nome, endereco_1, cidade, DECLARE CONTINUE HANDLER FOR NOT 79% DISCORD ALURA FÓRUM DO CURSO VOLTAR PARA DASHBOARD 106.3k xp ATIVIDADES 10 DE 11 https://cursos.alura.com.br/course/mysql-procedures https://discord.gg/Q35hcA5EFG https://cursos.alura.com.br/forum/curso-mysql-procedures/todos https://cursos.alura.com.br/dashboard https://cursos.alura.com.br/user/kiasbarreto https://cursos.alura.com.br/dashboard 17/10/2023, 18:14 Procedures SQL: executando código no MySQL: Aula 5 - Atividade 10 Consolidando o seu conhecimento | Alura - Cursos o… https://cursos.alura.com.br/course/mysql-procedures/task/56840 6/11 COPIAR CÓDIGO COPIAR CÓDIGO OPEN c; WHILE fim_do_cursor = 0 DO FETCH c INTO vNome, vEndereco, IF fim_do_cursor = 0 THEN SELECT CONCAT(vNome, ' Ende vEndereco, ', ', vCidade , END IF; END WHILE; CLOSE c; END$$ DELIMITER ; 7) Execute-a: call looping_cursor_multiplas_colun 79% DISCORD ALURA FÓRUM DO CURSO VOLTAR PARA DASHBOARD 106.3k xp ATIVIDADES 10 DE 11 https://cursos.alura.com.br/course/mysql-procedures https://discord.gg/Q35hcA5EFG https://cursos.alura.com.br/forum/curso-mysql-procedures/todos https://cursos.alura.com.br/dashboard https://cursos.alura.com.br/user/kiasbarreto https://cursos.alura.com.br/dashboard 17/10/2023, 18:14 Procedures SQL: executando código no MySQL: Aula 5 - Atividade 10 Consolidando o seu conhecimento | Alura - Cursos o… https://cursos.alura.com.br/course/mysql-procedures/task/56840 7/11 Esta SP também retorna múltiplas consultas. 8) Também podemos criar uma função. A diferença de uma função e uma SP é que a função retorna um valor e pode ser usada dentro de um comando SELECT , INSERT , UPDATE e condições de DELETE . 9) Para criar uma função vá com o botão da direita do mouse sobre Function e selecione Create Function: 10) Acrescente o código abaixo: CREATE FUNCTION `f_acha_tipo_sabor` BEGIN DECLARE vRetorno VARCHAR(20) defa CASE vSabor WHEN 'Lima/Limão' THEN SET vRetor 79% DISCORD ALURA FÓRUM DO CURSO VOLTAR PARA DASHBOARD 106.3k xp ATIVIDADES 10 DE 11 https://cursos.alura.com.br/course/mysql-procedures https://discord.gg/Q35hcA5EFG https://cursos.alura.com.br/forum/curso-mysql-procedures/todos https://cursos.alura.com.br/dashboard https://cursos.alura.com.br/user/kiasbarreto https://cursos.alura.com.br/dashboard 17/10/2023, 18:14 Procedures SQL: executando código no MySQL: Aula 5 - Atividade 10 Consolidando o seu conhecimento | Alura - Cursos o… https://cursos.alura.com.br/course/mysql-procedures/task/56840 8/11 COPIAR CÓDIGO WHEN 'Laranja' THEN SET vRetorno WHEN 'Morango/Limão' THEN SET vRe WHEN 'Uva' THEN SET vRetorno = 'N WHEN 'Morango' THEN SET vRetorno ELSE SET vRetorno = 'Ácidos'; END CASE; RETURN vRetorno; END 11) Clique em Apply. Teremos o código que poderá ser eecutado diretamente do script MYSQL. USE sucos_vendas; DROP function IF EXISTS f_acha_tipo DELIMITER $$ USE `sucos_vendas`$$ CREATE FUNCTION `f_acha_tipo_sabor` 79% DISCORD ALURA FÓRUM DO CURSO VOLTAR PARA DASHBOARD 106.3k xp ATIVIDADES 10 DE 11 https://cursos.alura.com.br/course/mysql-procedures https://discord.gg/Q35hcA5EFGhttps://cursos.alura.com.br/forum/curso-mysql-procedures/todos https://cursos.alura.com.br/dashboard https://cursos.alura.com.br/user/kiasbarreto https://cursos.alura.com.br/dashboard 17/10/2023, 18:14 Procedures SQL: executando código no MySQL: Aula 5 - Atividade 10 Consolidando o seu conhecimento | Alura - Cursos o… https://cursos.alura.com.br/course/mysql-procedures/task/56840 9/11 COPIAR CÓDIGO BEGIN DECLARE vRetorno VARCHAR(20) defa CASE vSabor WHEN 'Lima/Limão' THEN SET vRetor WHEN 'Laranja' THEN SET vRetorno WHEN 'Morango/Limão' THEN SET vRe WHEN 'Uva' THEN SET vRetorno = 'N WHEN 'Morango' THEN SET vRetorno ELSE SET vRetorno = 'Ácidos'; END CASE; RETURN vRetorno; END$$ DELIMITER ; 12) Clique em Apply. Teremos o código que poderá ser executado diretamente do script MYSQL. 79% DISCORD ALURA FÓRUM DO CURSO VOLTAR PARA DASHBOARD 106.3k xp ATIVIDADES 10 DE 11 https://cursos.alura.com.br/course/mysql-procedures https://discord.gg/Q35hcA5EFG https://cursos.alura.com.br/forum/curso-mysql-procedures/todos https://cursos.alura.com.br/dashboard https://cursos.alura.com.br/user/kiasbarreto https://cursos.alura.com.br/dashboard 17/10/2023, 18:14 Procedures SQL: executando código no MySQL: Aula 5 - Atividade 10 Consolidando o seu conhecimento | Alura - Cursos o… https://cursos.alura.com.br/course/mysql-procedures/task/56840 10/11 COPIAR CÓDIGO COPIAR CÓDIGO Observação: Se você veri�car um erro como mostrado abaixo: É porque o MYSQL não permite a construção de Funções. Para permitir, execute o comando: SET GLOBAL log_bin_trust_function_c E crie a função novamente. 13) Execute a função: SELECT f_acha_tipo_sabor ("Laranja" 14) Podemos usar a função num comando SELECT . Digite e execute: SELECT NOME_DO_PRODUTO, SABOR, f_ac 79% DISCORD ALURA FÓRUM DO CURSO VOLTAR PARA DASHBOARD 106.3k xp ATIVIDADES 10 DE 11 https://cursos.alura.com.br/course/mysql-procedures https://discord.gg/Q35hcA5EFG https://cursos.alura.com.br/forum/curso-mysql-procedures/todos https://cursos.alura.com.br/dashboard https://cursos.alura.com.br/user/kiasbarreto https://cursos.alura.com.br/dashboard 17/10/2023, 18:14 Procedures SQL: executando código no MySQL: Aula 5 - Atividade 10 Consolidando o seu conhecimento | Alura - Cursos o… https://cursos.alura.com.br/course/mysql-procedures/task/56840 11/11 COPIAR CÓDIGO FROM tabela_de_produtos; 79% DISCORD ALURA FÓRUM DO CURSO VOLTAR PARA DASHBOARD 106.3k xp ATIVIDADES 10 DE 11 https://cursos.alura.com.br/course/mysql-procedures https://discord.gg/Q35hcA5EFG https://cursos.alura.com.br/forum/curso-mysql-procedures/todos https://cursos.alura.com.br/dashboard https://cursos.alura.com.br/user/kiasbarreto https://cursos.alura.com.br/dashboard