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.

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. |
