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