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