Olá! Bem-vindo à nossa aula sobre estruturas ELSIF em Oracle PL/SQL. Hoje, vamos mergulhar nesse conceito fundamental que vai te ajudar a criar lógicas de decisão mais complexas em seus programas. Vamos lá?
O que é uma estrutura ELSIF?
Imagine que você está em uma sorveteria. Você tem várias opções de sabores, e cada escolha leva a um resultado diferente. É mais ou menos assim que funciona uma estrutura ELSIF!
A estrutura ELSIF é uma extensão da estrutura IF-THEN-ELSE que nos permite avaliar múltiplas condições em sequência. É como se estivéssemos fazendo várias perguntas, uma após a outra, até encontrar a resposta certa.
Sintaxe da estrutura ELSIF
Vamos dar uma olhada na estrutura básica de um comando ELSIF:
1 2 3 4 5 6 7 8 9 10 |
IF condição_1 THEN instrução_1; ELSIF condição_2 THEN instrução_2; ELSIF condição_3 THEN instrução_3; ... ELSE instrução_n; END IF; |
Representação visual da estrutura:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
(Início) | [condição_1] / \ / \ Verdadeiro Falso / \ (instrução_1) [condição_2] | / \ | / \ | Verdadeiro Falso | / \ | (instrução_2) [condição_3] | | / \ | | / \ | | Verdadeiro Falso | | / \ | | (instrução_3) (ELSE) | | | / | | | / | | | (instrução_n) \ | / | \ | / | \ | / | \ | / | \|/ | (Fim) |
Esta representação mostra como o fluxo de execução passa por cada condição até encontrar uma verdadeira ou chegar ao ELSE.
Exemplos práticos adicionais
Exemplo 1: Classificação de Idade
Vamos criar um programa que classifica pessoas por faixa etária:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
DECLARE v_idade NUMBER := &sv_idade; v_classificacao VARCHAR2(20); BEGIN IF v_idade < 0 THEN v_classificacao := 'Idade inválida'; ELSIF v_idade < 13 THEN v_classificacao := 'Criança'; ELSIF v_idade < 20 THEN v_classificacao := 'Adolescente'; ELSIF v_idade < 60 THEN v_classificacao := 'Adulto'; ELSE v_classificacao := 'Idoso'; END IF; DBMS_OUTPUT.PUT_LINE('Idade: ' || v_idade || ', Classificação: ' || v_classificacao); END; / |
Exemplo 2: Cálculo de Desconto
Agora, vamos criar um programa que calcula descontos com base no valor da compra:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
DECLARE v_valor_compra NUMBER := &sv_valor_compra; v_desconto NUMBER; v_valor_final NUMBER; BEGIN IF v_valor_compra < 0 THEN DBMS_OUTPUT.PUT_LINE('Valor inválido'); ELSIF v_valor_compra < 100 THEN v_desconto := 0; ELSIF v_valor_compra < 500 THEN v_desconto := 0.05; -- 5% de desconto ELSIF v_valor_compra < 1000 THEN v_desconto := 0.10; -- 10% de desconto ELSE v_desconto := 0.15; -- 15% de desconto END IF; IF v_valor_compra >= 0 THEN v_valor_final := v_valor_compra * (1 - v_desconto); DBMS_OUTPUT.PUT_LINE('Valor da compra: R$' || v_valor_compra); DBMS_OUTPUT.PUT_LINE('Desconto aplicado: ' || (v_desconto * 100) || '%'); DBMS_OUTPUT.PUT_LINE('Valor final: R$' || v_valor_final); END IF; END; / |
Exemplo 3: Classificação de Notas (com tabela)
Vamos implementar o exemplo de classificação de notas que mencionamos anteriormente, mas desta vez vamos armazenar os resultados em uma tabela:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
-- Cria a tabela para armazenar os resultados CREATE TABLE classificacao_notas ( id_aluno NUMBER, nota NUMBER, conceito CHAR(1) ); -- Sequência para gerar IDs únicos CREATE SEQUENCE seq_aluno START WITH 1; -- Bloco PL/SQL para classificar notas DECLARE v_nota NUMBER := &sv_nota; v_conceito CHAR(1); v_id_aluno NUMBER; BEGIN -- Gera um ID único para o aluno SELECT seq_aluno.NEXTVAL INTO v_id_aluno FROM DUAL; IF v_nota < 0 OR v_nota > 100 THEN DBMS_OUTPUT.PUT_LINE('Nota inválida'); ELSIF v_nota >= 90 THEN v_conceito := 'A'; ELSIF v_nota >= 80 THEN v_conceito := 'B'; ELSIF v_nota >= 70 THEN v_conceito := 'C'; ELSIF v_nota >= 60 THEN v_conceito := 'D'; ELSE v_conceito := 'F'; END IF; IF v_nota >= 0 AND v_nota <= 100 THEN -- Insere o resultado na tabela INSERT INTO classificacao_notas (id_aluno, nota, conceito) VALUES (v_id_aluno, v_nota, v_conceito); DBMS_OUTPUT.PUT_LINE('Aluno ID: ' || v_id_aluno); DBMS_OUTPUT.PUT_LINE('Nota: ' || v_nota); DBMS_OUTPUT.PUT_LINE('Conceito: ' || v_conceito); COMMIT; END IF; END; / -- Consulta os resultados SELECT * FROM classificacao_notas ORDER BY id_aluno; |
Dica extra: ELSIF sem ELSE
Lembre-se, você não é obrigado a usar ELSE em uma estrutura ELSIF. Por exemplo:
Neste caso, todas as possibilidades são cobertas pelas condições ELSIF, então não precisamos de um ELSE.
Exercício desafiador
Que tal criar um programa que determine a estação do ano com base no mês e no hemisfério? Aqui está o esqueleto do código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
DECLARE v_mes NUMBER := &sv_mes; v_hemisferio CHAR(1) := UPPER('&sv_hemisferio'); -- 'N' para Norte, 'S' para Sul v_estacao VARCHAR2(20); BEGIN -- Seu código aqui -- Use ELSIF para determinar a estação com base no mês e no hemisfério DBMS_OUTPUT.PUT_LINE('Mês: ' || v_mes); DBMS_OUTPUT.PUT_LINE('Hemisfério: ' || CASE WHEN v_hemisferio = 'N' THEN 'Norte' ELSE 'Sul' END); DBMS_OUTPUT.PUT_LINE('Estação: ' || v_estacao); END; / |
Tente implementar a lógica usando estruturas ELSIF!
Dica para Resolução:
Divisão das Estações do Ano por Hemisfério
1. Hemisfério Norte:
- Primavera: Março, Abril e Maio
- Início: Por volta de 21 de março (Equinócio de Primavera)
- Fim: Por volta de 20 de junho
- Verão: Junho, Julho e Agosto
- Início: Por volta de 21 de junho (Solstício de Verão)
- Fim: Por volta de 22 de setembro
- Outono: Setembro, Outubro e Novembro
- Início: Por volta de 23 de setembro (Equinócio de Outono)
- Fim: Por volta de 20 de dezembro
- Inverno: Dezembro, Janeiro e Fevereiro
- Início: Por volta de 21 de dezembro (Solstício de Inverno)
- Fim: Por volta de 20 de março
2. Hemisfério Sul:
- Primavera: Setembro, Outubro e Novembro
- Início: Por volta de 23 de setembro (Equinócio de Primavera)
- Fim: Por volta de 20 de dezembro
- Verão: Dezembro, Janeiro e Fevereiro
- Início: Por volta de 21 de dezembro (Solstício de Verão)
- Fim: Por volta de 20 de março
- Outono: Março, Abril e Maio
- Início: Por volta de 21 de março (Equinócio de Outono)
- Fim: Por volta de 20 de junho
- Inverno: Junho, Julho e Agosto
- Início: Por volta de 21 de junho (Solstício de Inverno)
- Fim: Por volta de 22 de setembro
Conclusão
Espero que estes exemplos adicionais e a representação visual tenham ajudado a solidificar seu entendimento sobre as estruturas ELSIF em Oracle PL/SQL. Lembre-se, a prática é fundamental para dominar esse conceito. Continue experimentando e criando seus próprios exemplos!