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

O que é a declaração CASE?

Uma instrução CASE é semelhante à instrução IF-THEN-ELSIF que seleciona uma alternativa com base na condição das opções disponíveis.

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

Sintaxe

CASE (expression)
 WHEN <valuel> THEN action_blockl;
 WHEN <value2> THEN action_block2;
 WHEN <value3> THEN action_block3;
 ELSE action_block_default;
END CASE;
  • Na sintaxe acima, a expressão retornará um valor que pode ser de qualquer tipo (variável, número, etc.).
  • Cada cláusula 'WHEN' é tratada como uma alternativa que tem e .
  • A cláusula 'WHEN' que corresponde ao valor da expressão será selecionada, e o correspondente será executado.
  • O bloco 'ELSE' é opcional e contém o que precisa ser executado quando nenhuma das alternativas corresponde ao valor da expressão.
  • O 'END' marca o fim da instrução CASE e é uma parte obrigatória do CASE.

1 exemplo: Cálculo Aritmético Usando Caso

Neste exemplo, faremos cálculos aritméticos 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;
/

Explicação do código

  • Linha de código 2: Declarando a variável 'a' como tipo de dados 'NUMBER' e inicializando-a com o valor '55'.
  • Linha de código 3: Declarando a variável 'b' como tipo de dados 'NUMBER' e inicializando-a com o valor '5.'
  • Linha de código 4: Declarando a variável 'arth_operation' como tipo de dados 'VARCHAR2' de tamanho 20 e inicializando-a com o valor 'MULTIPLY'.
  • Linha de código 6: Imprimindo a instrução “Programa iniciado”.
  • Linha de código 7: CASE verifica o valor da expressão. Neste caso, o valor da variável 'arth_operation' é 'MULTIPLY'. Este valor será tratado como um seletor para esta instrução CASE agora.
  • Linha de código 10: A cláusula WHEN com valor 'MULTIPLY' corresponde ao valor do seletor, portanto o controlador selecionará este bloco de ação e imprimirá a mensagem 'A multiplicação dos números é: 275'.
  • Linha de código 13: Marca o final da instrução CASE.
  • Linha de código 14: Imprimindo a declaração “Programa concluído”.

Saída de código

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

Declaração de CASO PESQUISADO

A instrução SEARCHED CASE é semelhante à instrução CASE, em vez de usar o seletor para selecionar a alternativa, SEARCHED CASE terá diretamente a expressão definida na cláusula WHEN.

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

Sintaxe

CASE
WHEN <expression1> THEN action_blockl; 
WHEN <expression2> THEN action_block2; 
WHEN <expression3> THEN action_block3; 
ELSE action_block_default;
END CASE;
  • Na sintaxe acima, cada cláusula WHEN possui o separado e .
  • A cláusula WHEN para a qual a expressão retorna TRUE será executada.
  • O bloco 'ELSE' é opcional e contém o que precisa ser executado quando nenhuma das alternativas satisfaz.
  • O 'END' marca o final da instrução CASE e é uma parte obrigatória do CASE.

1 exemplo: Cálculo aritmético usando caso pesquisado

Neste exemplo, faremos cálculos aritméticos 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;
/

Explicação do código

  • Linha de código 2: Declarando a variável 'a' como tipo de dados 'NUMBER' e inicializando-a com o valor '55'.
  • Linha de código 3: Declarando a variável 'b' como tipo de dados 'NUMBER' e inicializando-a com o valor '5'.
  • Linha de código 4: Declarando a variável 'arth_operation' como tipo de dados 'VARCHAR2' de tamanho 20 e inicializando-a com o valor 'DIVIDE'.
  • Linha de código 6: Imprimindo a instrução “Programa iniciado”.
  • Linha de código 7: a instrução SEARCHED CASE começa. O código da linha 8 à linha 13 é ignorado porque o valor do seletor (ADD, SUBTRACT, MULTIPLY) não corresponde ao valor de 'arth_operation'.
  • Linha de código 14: A expressão da cláusula WHEN “arth_operation = 'DIVIDE'” é satisfeita e a expressão retorna TRUE.
  • Linha de código 15: Action_block da cláusula WHEN será executado e a mensagem 'Divisão dos números são: 11' será impressa.
  • Linha de código 17: Marca o final da instrução CASE.
  • Linha de código 18: Imprimindo a declaração “Programa concluído”.

Saída de código

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

Resumo

TIPO DESCRIÇÃO USO
CASO Semelhante a SE-ENTÃO-ELSIF declaração. Um 'SELECTOR' é usado para escolher as alternativas em vez da expressão booleana. Usado para selecionar entre diversas alternativas usando 'SELECTOR'
CASO PESQUISADO Instrução CASE sem nenhum 'SELECTOR' real. Em vez disso, ele contém a condição real (que é avaliada como VERDADEIRO/FALSO) que selecionará as alternativas. Costumava escolher entre mais de duas alternativas principalmente.