Olá! Nesse artigo vamos falar de CASE Expressions no Oracle PL/SQL. Vamos mergulhar nesse recurso poderoso que vai te ajudar a escrever códigos mais limpos e eficientes. Pronto para começar? Vamos lá!
O que são CASE Expressions?
Imagine que você está em uma sorveteria. Você olha para o cardápio e pensa: “Se tiver chocolate, vou pedir chocolate. Se não tiver, vou de baunilha.” Esse processo de decisão é exatamente o que uma CASE Expression faz no PL/SQL!
Uma CASE Expression é como um mini-programa dentro do seu código que avalia condições e retorna um único valor baseado nessas condições. É como se fosse um garçom inteligente que entende exatamente o que você quer baseado nas opções disponíveis.
CASE Expression vs. CASE Statement
Antes de entrarmos nos detalhes, é importante entender a diferença entre uma CASE Expression e um CASE Statement. Pense assim:
- CASE Statement é como dar instruções: “Se for isso, faça aquilo.”
- CASE Expression é como fazer uma pergunta: “Se for isso, qual é o resultado?”
A principal diferença é que uma CASE Expression sempre retorna um valor, enquanto um CASE Statement executa um bloco de código.
Sintaxe Básica
Vamos ver como escrever uma CASE Expression:
1 2 3 4 5 6 |
CASE WHEN condição1 THEN resultado1 WHEN condição2 THEN resultado2 ... ELSE resultado_padrão END |
Parece simples, não é? Vamos ver um exemplo prático.
Exemplo: Números Pares e Ímpares
Imagine que queremos classificar um número como par ou ímpar. Veja como podemos fazer isso:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
DECLARE v_num NUMBER := &sv_user_num; v_resultado VARCHAR2(30); BEGIN v_resultado := CASE WHEN MOD(v_num, 2) = 0 THEN v_num || ' é um número par' ELSE v_num || ' é um número ímpar' END; DBMS_OUTPUT.PUT_LINE(v_resultado); END; |
Neste exemplo, usamos a função MOD para verificar se o número é divisível por 2. Se for, é par; caso contrário, é ímpar. A CASE Expression retorna uma string que é armazenada na variável v_resultado.
CASE Expression em Consultas SQL
As CASE Expressions não se limitam apenas a blocos PL/SQL. Elas são muito úteis em consultas SQL também.
Para aplicarmos o conceito, primeiro vamos criar uma tabela chamada cursos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
-- DDL: Criação da tabela de cursos CREATE TABLE cursos ( curso_num NUMBER PRIMARY KEY, descricao VARCHAR2(50), pre_requisito NUMBER ); -- DMLs: Inserção de dados de exemplo INSERT INTO cursos (curso_num, descricao, pre_requisito) VALUES (10, 'Introdução à Programação', NULL); INSERT INTO cursos (curso_num, descricao, pre_requisito) VALUES (20, 'Sistemas de Informação', NULL); INSERT INTO cursos (curso_num, descricao, pre_requisito) VALUES (30, 'Banco de Dados', 20); INSERT INTO cursos (curso_num, descricao, pre_requisito) VALUES (40, 'Programação Avançada', 10); -- Commit para salvar as alterações COMMIT; |
Agora vamos aplicar o conceito:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
DECLARE v_curso_num NUMBER; v_descricao VARCHAR2(50); v_pre_requisito VARCHAR2(35); BEGIN SELECT curso_num, descricao, CASE WHEN pre_requisito IS NULL THEN 'Nenhum pré-requisito necessário' ELSE TO_CHAR(pre_requisito) END pre_requisito INTO v_curso_num, v_descricao, v_pre_requisito FROM cursos WHERE curso_num = 20; DBMS_OUTPUT.PUT_LINE('Curso: ' || v_curso_num); DBMS_OUTPUT.PUT_LINE('Descrição: ' || v_descricao); DBMS_OUTPUT.PUT_LINE('Pré-requisito: ' || v_pre_requisito); END; |
Neste exemplo, usamos uma CASE Expression dentro de uma consulta SQL para formatar a saída do pré-requisito do curso.
Vamos ver um Exemplo adicional com um curso que tem pré-requisito:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
DECLARE v_curso_num NUMBER; v_descricao VARCHAR2(50); v_pre_requisito VARCHAR2(35); BEGIN SELECT curso_num, descricao, CASE WHEN pre_requisito IS NULL THEN 'Nenhum pré-requisito necessário' ELSE 'Curso ' || TO_CHAR(pre_requisito) || ' é pré-requisito' END pre_requisito INTO v_curso_num, v_descricao, v_pre_requisito FROM cursos WHERE curso_num = 30; DBMS_OUTPUT.PUT_LINE('Curso: ' || v_curso_num); DBMS_OUTPUT.PUT_LINE('Descrição: ' || v_descricao); DBMS_OUTPUT.PUT_LINE('Pré-requisito: ' || v_pre_requisito); END; / |
Dica Importante: Consistência de Tipos de Dados
Um ponto crucial ao usar CASE Expressions é garantir que todos os resultados possíveis tenham o mesmo tipo de dado. No exemplo anterior, usamos TO_CHAR(pre_requisito) para converter o número do pré-requisito em uma string, mantendo a consistência com o caso em que não há pré-requisito.
Se não fizermos isso, o Oracle pode nos dar um erro de “tipos de dados inconsistentes”. É como tentar misturar água e óleo – simplesmente não funciona!
Conclusão
As CASE Expressions são ferramentas poderosas no seu arsenal PL/SQL. Elas permitem que você tome decisões complexas de forma elegante e eficiente. Lembre-se:
- Use CASE Expressions quando precisar de um valor baseado em condições.
- Mantenha a consistência dos tipos de dados nos resultados.
- CASE Expressions podem ser usadas tanto em blocos PL/SQL quanto em consultas SQL.
Pratique bastante e você verá como elas podem tornar seu código mais limpo e fácil de entender.