Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Declaração do caso Oracle explicada com dicas e exemplos


Vimos o funcionamento do processamento do Oracle Decode no post anterior

Processamento de decodificação Oracle sql

Agora vamos ver o processamento de instruções do Oracle Case

Instrução de caso no Oracle


É semelhante à instrução Decode. Os bancos de dados anteriores ao Oracle 8.1.6 tinham apenas a função DECODE. CASE foi introduzido no Oracle 8.1.6 como uma função padrão, mais significativa e mais poderosa.

Tudo o que o DECODE pode fazer, o CASE também pode. No entanto, há muito mais que o CASE pode fazer, o que o DECODE não pode. Veremos exemplos detalhados neste artigo

Vamos começar com a sintaxe da instrução Case
CASE [expression]

when condition_1 then value_1
when condition_2 then value_2
when condition_2 then value_2
….

else value_n
end

expressão é opcional

Podemos dividir a instrução Case em duas categorias Instrução Simple Case e Instrução Case pesquisável

Instrução case simples é como a função Decode.


Exemplo com instrução CASE simples
select
case
region
when ‘N’ then ’North’
when ‘S’ then ’South’
when ‘E’ then ’East’,
when ‘W’ then ’West’
else ‘UNKNOWN’
end
from
customer;

Instrução Case pesquisável são declarações case onde especificamos uma condição ou predicado (instrução case no oráculo com várias condições)

SQL> select emp_name
, case
when Salary < 10000
then 'Junior Level'
when (Salary >=10000 and Salary < 50000)
then 'Middle Level'
when (Salary >= 50000 and Salary < 100000)
then 'Senior Level'
else 'Managers'
end Emp_level
from employee_info
where rownum < 5;

EMP_NAME EMP_LEVEL
---------- ---------
JOHN Junior Level
DON Senior Level
BOB Manager
BILL Middle Level

Instrução do caso Oracle aninhado


Esta é a instrução case dentro da instrução case
SQL> select emp_name
, case
when Salary < 10000
then 'Junior Level'
when (Salary >=10000 and Salary < 50000)
then 'Middle Level'
when (Salary >= 50000 and Salary < 100000)
then 'Senior Level'
else  (Case when grade ='20'  then 'Vice President'
when grade='21'  then 'Senior Vice President'
else 'Manager'
End)
end Emp_level
from employee_info
where rownum < 5;

Pontos importantes sobre a declaração Case simples e pesquisável


(1) O CASE pesquisado avalia as condições independentemente em cada uma das opções “quando”. Com essa estrutura, condições muito mais complexas podem ser implementadas com um CASE pesquisado do que com um CASE simples.

(2) Um CASE pesquisado pode combinar vários testes usando várias colunas, comparações e operadores AND/OR.

(3) Construções CASE simples e pesquisadas, as condições são avaliadas sequencialmente de cima para baixo e a execução termina após a primeira correspondência ser encontrada. Então, suponha que mais de uma condição seja verdadeira, apenas a primeira ação é considerada.

(4) O Oracle Database usa avaliação de curto-circuito. Ou seja, para uma expressão CASE simples, o banco de dados avalia cada valor de comparação_expr apenas antes de compará-lo com expr, em vez de avaliar todos os valores de comparação_expr antes de comparar qualquer um deles com expr. Conseqüentemente, o Oracle nunca avalia uma comparação_expr se uma comparação_expr anterior for igual a expr. Para uma expressão CASE pesquisada, o banco de dados avalia cada condição para determinar se é verdadeira e nunca avalia uma condição se a condição anterior for verdadeira

Agora vamos ver a diferença entre a instrução Case e Decode


(1) DECODE pode trabalhar apenas com valores escalares, mas CASE pode trabalhar com operadores lógicos, predicados e subconsultas pesquisáveis.

Sabemos que a decodificação pode funcionar com valores escalares. Não podemos usá-lo para operadores lógicos. Temos que convertê-lo em valores escalares para fazer uso disso.

Case facilita todo o processo. Podemos facilmente usar o operador lógico na instrução Case
SQL> select city
, case
when population < 100000
then 'Tier I'
when (population >=100000 and population < 200000)
then 'Tier II'
when (population >= 200000 and population < 300000)
then 'Tier III'
else 'TIER IV'
end City_Tier
from city_info
where rownum < 5;

CITY CITY_TIER
---------- ---------
XYX TIER I
XYZ TIER II
XZW TIER II


O acima é chamado de instruções Case pesquisáveis

(2) CASE pode funcionar como uma construção PL/SQL, mas DECODE é usado apenas em instruções SQL. CASE pode ser usado como parâmetro de uma função/procedimento.

Exemplo
DECLARE

V_x VARCHAR2(10) := 'A';
V_y VARCHAR2(10);

BEGIN

V_y := CASE V_x
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Good'
WHEN 'C' Then 'Average'
ELSE 'Poor'
END;

DBMS_OUTPUT.PUT_LINE(
'Grade V_x is '||V_y||'.'
);

END;
/

A nota V_x é excelente.

(3) CASE espera consistência de tipo de dados, DECODE não.
select case 5 when 1 then '1'
2 when '2' then '2'
3 else '5'
4 end
5 from dual;
when '2' then '2'
*
ERROR at line 2:
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR

(4) CASE está em conformidade com ANSI SQL. DECODE é propriedade da Oracle.

(5) CASE executa mais rápido no otimizador do que DECODE.

(6) CASE é uma instrução enquanto DECODE é uma função.

Artigos relacionados
Tutoriais Oracle sql:Listagem de todas as lições de tutorial sql que podem ser usadas para dominar sql e usar em gerenciamento e manipulação de dados RDBMS (Oracle,MySql)
Perguntas da entrevista Oracle:Confira esta página para as 49 principais Perguntas e respostas do Oracle Interview:Noções básicas, Oracle SQL para te ajudar nas entrevistas.
registros oracle PLSQL:Confira este artigo sobre o funcionamento dos registros oracle PLSQL. Além disso, descubra as várias maneiras de defini-lo e atribuir valor a ele
Ferramenta de desenvolvedor Oracle SQL:Confira nesta página todas as informações sobre a ferramenta de desenvolvedor Oracle sql, Como fazer download do desenvolvedor Oracle sql, como instalar
funções de data oracle:Confira este post para funções de data oracle, diferença de data oracle em anos, diferença de data oracle em dias, diferença de data oracle em meses.
https://docs.oracle.com/cd /B19306_01/server.102/b14200/expressions004.htm

Cursos recomendados


Aqui está o bom curso da Udemy para Oracle SQL
Oracle-Sql-Step-by-step:Este curso abrange sql básico, junções, criação de tabelas e modificação de sua estrutura, criação de exibição, união, união -tudo e muitas outras coisas . Um ótimo curso e curso obrigatório para iniciantes em SQL
O Curso Completo de Certificação Oracle SQL :Este é um bom curso para quem quer estar pronto para trabalhar com habilidades de desenvolvedor SQL. Um bom curso explicado
Oracle SQL Developer:Essentials, Tips and Tricks :A ferramenta de desenvolvedor Oracle Sql está sendo usada por muitos desenvolvedores. Este curso nos dá truques e lições sobre como usá-lo efetivamente e se tornar um desenvolvedor sql produtivo
Oracle SQL Performance Tuning Masterclass 2020 :O ajuste de desempenho é uma das habilidades críticas e mais procuradas. Este é um bom curso para aprender sobre isso e começar a fazer o ajuste de desempenho do sql