Declaração CASE em Oracle PL/SQL com exemplos

⚡ Resumo Inteligente

A instrução CASE em PL/SQL seleciona uma alternativa dentre várias com base em um seletor, de forma semelhante ao IF-THEN-ELSIF, porém mais clara. Um CASE simples corresponde a um valor de seletor, enquanto um CASE com pesquisa avalia uma condição em cada cláusula WHEN e executa a primeira que for verdadeira.

  • 🔀 Objetivo: O CASE escolhe um bloco de ação dentre vários, usando um seletor em vez de uma cadeia booleana.
  • 🎯 Seletor: A expressão CASE é avaliada uma única vez e comparada com cada valor WHEN.
  • 🔎 Caso pesquisado: Insere uma condição completa em cada cláusula WHEN e executa a primeira que for verdadeira.
  • 🧮 Qualquer tipo: O seletor pode ser uma variável, um número ou uma expressão aritmética.
  • 🛟 OUTRO: O bloco ELSE opcional é executado quando não há correspondências alternativas.
  • 🔚 CASO FINAL: Um comando END CASE obrigatório encerra a instrução.
  • 🗄️ Compatível com SQL: Ao contrário do IF, o CASE também pode ser usado diretamente dentro de instruções SQL.

Declaração CASE em Oracle PL/SQL

O que é uma declaração CASE?

A instrução CASE é semelhante à instrução IF-THEN-ELSIF; ela seleciona uma alternativa com base em uma condição dentre as opções disponíveis.

  • Uma instrução CASE usa um "seletor" em vez de uma expressão booleana para escolher a sequência.
  • O valor da expressão na instrução CASE é tratado como um seletor.
  • A expressão pode ser de qualquer tipo (aritmética, variáveis, etc.).
  • A cada alternativa é atribuído um determinado valor predefinido (seletor), e a alternativa cujo valor do seletor corresponde ao valor da expressão condicional é executada.
  • Ao contrário de IF-THEN-ELSIF, a instrução CASE também pode ser usada em instruções SQL.
  • O bloco ELSE em uma instrução CASE contém a sequência a ser executada quando nenhuma das alternativas for selecionada.

Sintaxe

CASE (expression)
WHEN <value1> THEN action_block1;
WHEN <value2> THEN action_block2;
WHEN <value3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • Na sintaxe acima, a expressão retorna um valor que pode ser de qualquer tipo.
  • Cada cláusula 'WHEN' é uma alternativa que possui um e um .
  • A cláusula 'WHEN' cujo valor corresponde à expressão é selecionada, e seu é executado.
  • O bloco 'ELSE' é opcional e contém o Executar quando não houver correspondências alternativas.
  • 'END' marca o fim da instrução CASE e é uma parte obrigatória do CASE.

Exemplo 1: Cálculo aritmético usando CASE

Neste exemplo, realizamos um cálculo aritmético entre dois números, 55 e 5.

DECLARE
a NUMBER := 55;
b NUMBER := 5;
arth_operation VARCHAR2(20) := 'MULTIPLY';
BEGIN
dbms_output.put_line('Program started.');
CASE (arth_operation)
WHEN 'ADD' THEN dbms_output.put_line('Addition of the numbers are: '|| a+b );
WHEN 'SUBTRACT' THEN dbms_output.put_line('Subtraction of the numbers are: '||a-b );
WHEN 'MULTIPLY' THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b );
WHEN 'DIVIDE' THEN dbms_output.put_line('Division of the numbers are:'|| a/b);
ELSE dbms_output.put_line('No operation action defined. Invalid operation');
END CASE;
dbms_output.put_line('Program completed.');
END;
/

Code Explicação

  • Code Linha 2: Declarando a variável 'a' como 'NUMBER' e inicializando-a com o valor '55'.
  • Code Linha 3: Declarando a variável 'b' como 'NUMBER' e inicializando-a com o valor '5'.
  • Code Linha 4: Declarando a variável 'arth_operation' como 'VARCHAR2' de tamanho 20 e inicializando-a com o valor 'MULTIPLY'.
  • Code Linha 6: Imprimindo a mensagem “Programa iniciado”.
  • Code Linha 7: CASE verifica o valor da expressão. Aqui, o valor de 'arth_operation' é 'MULTIPLY', que é tratado como o seletor.
  • Code Linha 10: A cláusula WHEN com o valor 'MULTIPLY' corresponde ao seletor, então o controlador seleciona este bloco de ação e imprime 'A multiplicação dos números é: 275'.
  • Code Linha 13: Marca o fim da instrução CASE.
  • Code Linha 14: Imprimindo a mensagem “Programa concluído”.

Code saída

Program started.
Multiplication of the numbers are: 275
Program completed.

Declaração de CASO PESQUISADO

A instrução CASE pesquisada é semelhante à instrução CASE, mas em vez de usar um seletor para escolher a alternativa, a condição na cláusula WHEN é definida diretamente na instrução CASE pesquisada.

  • A primeira cláusula WHEN que satisfizer a condição é executada e o controlador ignora as alternativas restantes.

Sintaxe

CASE
WHEN <expression1> THEN action_block1;
WHEN <expression2> THEN action_block2;
WHEN <expression3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • Na sintaxe acima, cada cláusula WHEN possui um separador. e .
  • A cláusula WHEN para a qual a expressão retorna VERDADEIRO é executada.
  • O bloco 'ELSE' é opcional e contém o Executar quando nenhuma das alternativas for satisfatória.
  • 'END' marca o fim da instrução CASE e é uma parte obrigatória do CASE.

Exemplo 1: Cálculo aritmético usando CASE pesquisado

Neste exemplo, realizamos um cálculo aritmético entre dois números, 55 e 5.

DECLARE
a NUMBER := 55;
b NUMBER := 5;
arth_operation VARCHAR2(20) := 'DIVIDE';
BEGIN
dbms_output.put_line('Program started.');
CASE
WHEN arth_operation = 'ADD'
THEN dbms_output.put_line('Addition of the numbers are: '||a+b );
WHEN arth_operation = 'SUBTRACT'
THEN dbms_output.put_line('Subtraction of the numbers are: '|| a-b);
WHEN arth_operation = 'MULTIPLY'
THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b );
WHEN arth_operation = 'DIVIDE'
THEN dbms_output.put_line('Division of the numbers are: '|| a/b );
ELSE dbms_output.put_line('No operation action defined. Invalid operation');
END CASE;
dbms_output.put_line('Program completed.');
END;
/

Code Explicação

  • Code Linha 2: Declarando a variável 'a' como 'NUMBER' e inicializando-a com o valor '55'.
  • Code Linha 3: Declarando a variável 'b' como 'NUMBER' e inicializando-a com o valor '5'.
  • Code Linha 4: Declarando a variável 'arth_operation' como 'VARCHAR2' de tamanho 20 e inicializando-a com o valor 'DIVIDE'.
  • Code Linha 6: Imprimindo a mensagem “Programa iniciado”.
  • Code Linha 7: Inicia-se a instrução CASE pesquisada. As cláusulas para ADD e SUB.TRACAs operações T e MULTIPLY são ignoradas, pois suas condições não correspondem ao valor de 'arth_operation'.
  • Code Linha 14: A expressão da cláusula WHEN “arth_operation = 'DIVIDE'” é satisfeita e retorna VERDADEIRO.
  • Code Linha 15: O bloco de ação da cláusula WHEN é executado e 'Divisão dos números: 11' é impresso.
  • Code Linha 17: Marca o fim da instrução CASE.
  • Code Linha 18: Imprimindo a mensagem “Programa concluído”.

Code saída

Program started.
Division of the numbers are: 11
Program completed.

Comparação entre CASO e CASO PESQUISADO

Ambas as formas escolhem um ramo, mas diferem na maneira como o ramo é selecionado, conforme resumido abaixo.

Formato Descrição Uso
CASO Semelhante ao SE-ENTÃO-ELSIF declaração. Um 'seletor' é usado para escolher a alternativa em vez de uma expressão booleana. Utilizado para selecionar entre várias alternativas usando um seletor.
CASO PESQUISADO Uma instrução CASE sem um seletor real. Em vez disso, ela contém a condição (que é avaliada como VERDADEIRA ou FALSA) que seleciona a alternativa. Costumava-se escolher entre mais de duas alternativas, geralmente com condições de intervalo.

Perguntas Frequentes

Um CASE simples compara um valor de seletor com cada valor de WHEN. Um CASE com busca não possui seletor e avalia uma condição completa em cada WHEN, portanto, lida com intervalos e testes compostos.

Sim. Uma expressão CASE pode aparecer em uma cláusula SELECT, WHERE ou ORDER BY, o que é uma grande vantagem em relação ao IF-THEN-ELSIF, uma construção que funciona apenas dentro de blocos PL/SQL.

Uma instrução CASE gera a exceção CASE_NOT_FOUND se nenhuma ramificação corresponder e nenhum ELSE estiver presente. Adicionar um ELSE, mesmo que seja uma ação NULL vazia, evita esse erro de tempo de execução.

Sim. Quando os ramos comparam uma expressão a valores fixos, a IA pode reescrever a cadeia como um CASE mais limpo. Verifique o resultado, pois um CASE sem um ELSE se comporta de maneira diferente de um ELSIF ausente.

Uma instrução CASE executa um bloco de ação por ramificação e termina com END CASE. Uma expressão CASE retorna um único valor e termina com END, podendo ser atribuída a uma variável ou usada em SQL.

Resuma esta postagem com: