Oracle
 sql >> Base de données >  >> RDS >> Oracle

Déclaration de cas Oracle expliquée avec des conseils et des exemples

Nous avons vu le fonctionnement du traitement Oracle Decode dans le post précédent

Traitement de décodage Oracle SQL

Voyons maintenant le traitement des instructions Oracle Case

Déclaration de cas dans Oracle

Elle est similaire à l'instruction Decode. Les bases de données antérieures à Oracle 8.1.6 n'avaient que la fonction DECODE. CASE a été introduit dans Oracle 8.1.6 en tant que fonction standard, plus significative et plus puissante.

Tout ce que DECODE peut faire, CASE le peut aussi. Il y a beaucoup d'autres choses que CASE peut faire, ce que DECODE ne peut pas faire. Nous allons passer en revue des exemples détaillés dans cet article

Commençons par la syntaxe de l'instruction 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

l'expression est facultative

Nous pouvons diviser l'instruction de cas en deux catégories Instruction de cas simple et Instruction de cas consultable

La déclaration de cas simple est comme la fonction Decode.

Exemple avec une instruction CASE simple

select
case
region
when ‘N’ then ’North’
when ‘S’ then ’South’
when ‘E’ then ’East’,
when ‘W’ then ’West’
else ‘UNKNOWN’
end
from
customer;

Les instructions de cas consultables sont des instructions de cas dans lesquelles nous spécifions une condition ou un prédicat (instruction de cas dans oracle avec plusieurs conditions)

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

Instruction de cas Oracle imbriquée

Ceci est une déclaration de cas dans la déclaration de cas

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;

Points importants sur l'instruction Case simple et consultable

(1) Le CASE recherché évalue les conditions indépendamment sous chacune des options "quand". Avec cette structure, des conditions beaucoup plus complexes peuvent être implémentées avec un CASE recherché qu'un simple CASE.

(2) Un CASE recherché peut combiner plusieurs tests à l'aide de plusieurs colonnes, comparaisons et opérateurs AND/OR.

(3) Les constructions CASE simples et recherchées, les conditions sont évaluées séquentiellement de haut en bas, et les sorties d'exécution après la première correspondance sont trouvées. Donc, supposons que plus d'une condition soit vraie, seule la première action est prise en compte.

(4) Oracle Database utilise une évaluation de court-circuit. C'est-à-dire que pour une expression CASE simple, la base de données évalue chaque valeur de comparison_expr uniquement avant de la comparer à expr, plutôt que d'évaluer toutes les valeurs de comparison_expr avant de comparer l'une d'entre elles avec expr. Par conséquent, Oracle n'évalue jamais une comparaison_expr si une comparaison_expr précédente est égale à expr. Pour une expression CASE recherchée, la base de données évalue chaque condition pour déterminer si elle est vraie, et n'évalue jamais une condition si la condition précédente était vraie

Voyons maintenant la différence entre l'instruction Case et Decode

(1) DECODE ne peut fonctionner qu'avec des valeurs scalaires, mais CASE peut fonctionner avec des opérateurs logiques, des prédicats et des sous-requêtes interrogeables.

Nous savons que le décodage peut fonctionner avec des valeurs scalaires. Nous ne pouvons pas l'utiliser pour les opérateurs logiques. Nous devons le convertir en valeurs scalaires pour en faire usage.

Case facilite l'ensemble du processus. Nous pouvons facilement utiliser l'opérateur logique dans l'instruction 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

Ce qui précède est appelé déclarations de cas consultables

(2) CASE peut fonctionner comme une construction PL/SQL mais DECODE n'est utilisé que dans les instructions SQL. CASE peut être utilisé comme paramètre d'une fonction/procédure.

Exemple

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;
/

La note V_x est excellente.

(3) CASE attend la cohérence du type de données, DECODE non.

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 conforme à ANSI SQL. DECODE est la propriété d'Oracle.

(5) CASE s'exécute plus rapidement dans l'optimiseur que DECODE.

(6) CASE est une instruction alors que DECODE est une fonction.

Articles connexes
Tutoriels Oracle SQL :Liste de toutes les leçons du didacticiel SQL qui peuvent être utilisées pour maîtriser SQL et utiliser dans la gestion et la manipulation des données SGBDR (Oracle, MySql)
Questions d'entretien Oracle : Consultez cette page pour le Top 49 Questions et réponses d'Oracle Interview :Bases, Oracle SQL pour vous aider dans les entretiens.
Enregistrements Oracle PLSQL :Consultez cet article sur le fonctionnement des enregistrements Oracle PLSQL. Découvrez également les différentes manières de le définir et de lui attribuer une valeur
Fonctions de date Oracle :consultez cet article pour les fonctions de date Oracle, la différence de date Oracle en années, la différence de date Oracle en jours, la différence de date Oracle en mois.
https://docs.oracle.com/cd /B19306_01/server.102/b14200/expressions004.htm

Cours recommandés

Voici le joli cours Udemy pour Oracle SQL
Oracle-Sql-Step-by-step :Ce cours couvre les bases de SQL, les jointures, la création de tables et la modification de sa structure, la création de vues, l'union, l'union -all et bien d'autres choses . Un excellent cours et un cours indispensable pour les débutants SQL
Le cours complet de certification Oracle SQL  :c'est un bon cours pour tous ceux qui veulent être prêts à travailler pour les compétences de développeur SQL. Un cours bien expliqué
Oracle SQL Developer :Essentials, Tips and Tricks  :l'outil de développement Oracle SQL est utilisé par de nombreux développeurs. Ce cours nous donne des astuces et des leçons sur la façon de l'utiliser efficacement et de devenir un développeur sql productif
Oracle SQL Performance Tuning Masterclass 2020  :l'optimisation des performances est l'une des compétences essentielles et les plus recherchées. C'est un bon cours pour en savoir plus et commencer à ajuster les performances SQL