Maison / Réseaux sociaux / Description Oracle nvl. Instructions de branche dans la commande SELECT. Fonctions EXP(n) et LN(n)

Description Oracle nvl. Instructions de branche dans la commande SELECT. Fonctions EXP(n) et LN(n)

Fonction NVL

La fonction NVL est généralement la plus utilisée. La fonction reçoit deux paramètres : NVL(expr1, expr2). Si le premier paramètre expr1 n'est pas NULL, alors la fonction renvoie sa valeur. Si le premier paramètre est NULL, alors la fonction renvoie la valeur du deuxième paramètre expr2 à la place.

Considérer exemple pratique. Le champ COMM de la table EMP peut contenir des valeurs NULL. Lors de l'exécution d'une requête comme :

SELECT EMPNO, ENAME, COMM, NVL(COMM, 0) NVL_COMM

DE SCOTT.EMP

la valeur NULL sera remplacée par zéro. Notez que si une valeur est générée à l'aide d'une fonction, un alias lui est attribué. Les résultats de la requête ressembleront à :

EMPNO ENAME COMMUNICATION NVL_COMM
7369 FORGERON 0
7499 ALLEMANDE 300 300
7521 SALLE 500 500
7566 JONES 0
7654 MARTIN 1400 1400
7698 BLAKE 0
7782 CLARK 0
7839 ROI 0
7844 TOURNEUR 0 0
7900 JAMES 0
7902 GUÉ 0
7934 MEUNIER 0

Fonction CEIL(n)

La fonction CEIL renvoie le plus petit entier supérieur ou égal au nombre n passé en paramètre. Par exemple:

SÉLECTIONNER PLAFOND(100) X1, PLAFOND(-100) X2, PLAFOND(100.2) X3 , PLAFOND(-100.2) X4

DU DOUBLE

TRUNC(n[,m])

La fonction TRUNC renvoie le nombre n tronqué à m décimales. Le paramètre m peut être omis, auquel cas n est tronqué à un nombre entier.

SÉLECTIONNER TRUNC(100.25678) X1, TRUNC(-100.25678) X2, TRUNC(100.99) X3,

TRONC(100.25678, 2) X4

DU DOUBLE

Fonction SIGN(n)

La fonction SIGN détermine le signe d'un nombre. Si n est positif, la fonction renvoie 1. S'il est négatif, renvoie -1. S'il est égal à zéro, 0 est renvoyé. Par exemple :

SÉLECTIONNER SIGN(100.22) X1, SIGN(-100.22) X2, SIGN(0) X3

DU DOUBLE

Une caractéristique intéressante de cette fonction est la possibilité de passer m égal à zéro sans erreur de division par 0.

Fonction PUISSANCE(n, m)

La fonction POWER élève le nombre n à la puissance m. Le degré peut être fractionnaire et négatif, ce qui étend considérablement les capacités de cette fonction.

SÉLECTIONNER PUISSANCE(10, 2) X1, PUISSANCE(100, 1/2) X2,

PUISSANCE(1000, 1/3) X3, PUISSANCE(1000, -1/3) X4

DU DOUBLE

X1 X2 X3 X4
100 10 10 0,1

Dans certains cas, une exception peut se produire lors de l'appel de cette fonction. Par exemple:

SÉLECTIONNER LA PUISSANCE (-100, 1/2) X2

DU DOUBLE

Dans ce cas, une tentative est faite pour calculer la racine carrée d'un nombre négatif, ce qui entraînera une erreur ORA-01428 "Argument hors plage".

Fonction SQRT(n)

Cette fonction renvoie la racine carrée de n. Par exemple:

SÉLECTIONNER CARRÉ(100) X

DU DOUBLE

Fonctions EXP(n) et LN(n)

La fonction EXP élève e à la puissance n, et la fonction LN calcule le logarithme naturel de n (avec n doit être supérieur à zéro). Exemple:

SÉLECTIONNER EXP(2) X1, LN(1) X2, LN(EXP(2)) X3

Fonction TO_CHAR avec des nombres

Fonctions de conversion de données vers d'autres types de données. TO_CHAR(nombre) convertit un nombre en texte. TO_NUMBER(chaîne) convertit le texte en nombre.

SELECT TO_CHAR (123) FROM DUAL renverra la chaîne 123, SELECT TO_NUMBER (`12345") FROM DUAL renverra le nombre 12345.

Travail de laboratoire. Modification du format des numéros de sortie

Changements de format numérique dans Oracle SQL, fonction TO_CHAR pour travailler avec des valeurs numériques.

Exercer:

Rédigez une requête qui affiche des informations sur le prénom, le nom et le salaire des employés de la table hr.employees au format illustré à la figure 1. 3.4-1 :

Riz. 3.4 -1

Dans le même temps, les données doivent être triées de manière à ce que les lignes des employés ayant le salaire le plus élevé soient affichées en premier.

Note:

Certaines valeurs salariales de la Fig. 3.4-1 ont été modifiés afin qu'ils ne correspondent pas à vos valeurs.

Solution:

SELECT first_name AS "First Name", last_name As "Last Name", TO_CHAR(SALARY, "L999999999.99") As "Salary" FROM hr.employees ORDER BY SALARY DESC.

Fonctions TO_NUMBER et TO_DATE

Fonction pour convertir une chaîne en date TO_DATE(chaîne, format). Valeurs possibles formats ont déjà été discutés ci-dessus, je vais donc donner quelques exemples d'utilisation de cette fonction. Exemples:

SÉLECTIONNER TO_DATE("01/01/2010", `JJ.MM.AAAA") DEPUIS DUAL renverra la date `01.01.2010" ;

SÉLECTIONNER TO_DATE("01.JAN.2010",`JJ.MON.AAAA") DEPUIS DUAL renverra la date `01.01.2009" ;

SÉLECTIONNER TO_DATE("15-01-10",`JJ-MM-AA") DEPUIS DUAL renverra la date `15/01/2010'.

Une fonction pour convertir une chaîne en une valeur numérique TO_NUMBER (chaîne, format). Les valeurs de format les plus courantes sont répertoriées dans le tableau, considérons donc l'utilisation de cette fonction à l'aide d'exemples. Exemples:

SÉLECTIONNER TO_NUMBER(`100") DEPUIS DUAL renverra le nombre 100 SELECT TO_NUMBER(`0010.01", "9999D99") DEPUIS DUAL renverra le nombre 10.01 ;

SÉLECTIONNER TO_NUMBER("500,000", "999G999") DEPUIS DUAL renverra le nombre 500000.

Élément RR au format date

L'élément de format de date et d'heure RR est similaire à l'élément de format de date et d'heure YY, mais il offre une flexibilité supplémentaire pour le stockage des valeurs de date dans d'autres siècles. L'élément de format datetime RR vous permet de stocker des dates du 20e siècle au 21e siècle en spécifiant uniquement les deux derniers chiffres de l'année.

Si les deux derniers chiffres de l'année en cours sont compris entre 00 et 49, l'année renvoyée a les mêmes deux premiers chiffres que l'année en cours.

Si les deux derniers chiffres de l'année en cours sont compris entre 50 et 99, les 2 premiers chiffres de l'année renvoyée sont supérieurs de 1 aux 2 premiers chiffres de l'année en cours.

Si les deux derniers chiffres de l'année en cours sont compris entre 00 et 49, les 2 premiers chiffres de l'année renvoyée sont inférieurs de 1 aux 2 premiers chiffres de l'année en cours.

Si les deux derniers chiffres de l'année en cours sont compris entre 50 et 99, l'année renvoyée a les mêmes deux premiers chiffres que l'année en cours.

Fonction NVL

La fonction NVL est généralement la plus utilisée. La fonction reçoit deux paramètres : NVL(expr1, expr2). Si le premier paramètre expr1 n'est pas NULL, alors la fonction renvoie sa valeur. Si le premier paramètre est NULL, alors la fonction renvoie la valeur du deuxième paramètre exp2 à la place.

Exemple : Sélectionnez NVL (ville_fournisseur, n/a") parmi les fournisseurs :

L'instruction SQL ci-dessus renverra n/" si le champ supplier_city contient valeur zéro. Sinon, il renverra la valeur supplier_city.

Un autre exemple d'utilisation de la fonction NVL dans Oracle/PLSQL est :

sélectionnez supplier_id, NVL (supplier_desc, supplier_name) parmi les fournisseurs.

Cette instruction SQL renverra Nom du fournisseur champ si fournisseur_desc contient une valeur nulle. Sinon ça reviendra fournisseur_desc.

Dernier exemple : utiliser la fonction NVL dans Oracle/PLSQL est : select NVL(commission, 0) from sales;

Cette instruction SQL a renvoyé la valeur 0 si commission le champ contient une valeur nulle. Sinon, ça reviendrait commissions champ.

Transformations NVL pour différents types de données

Pour convertir une valeur indéfinie en valeur réelle, utilisez la fonction NVL : NLV ( expression1, expression2), Où:

expression1- La valeur d'origine ou calculée, qui peut être nulle.

expression2- La valeur qui remplace la valeur nulle.

Note: La fonction NVL peut être utilisée pour convertir n'importe quel type de données, mais le résultat sera toujours du même type que expression1.

Conversion NVL pour divers types:

NOMBRE-NVL (colonne numérique, 9).

CHAR ou VARCHAR2 - NVL (caractères|colonne,"Indisponible").

Travail de laboratoire. Application de la fonction NVL

Fonction NVL pour traiter les valeurs nulles dans Oracle SQL.

Exercer:

Rédigez une requête qui affiche des informations sur les noms et prénoms des employés de la table hr.employees., ainsi que le taux de commission (colonne COMMISSION_PCT) pour l'employé. Dans ce cas, pour les employés pour lesquels la commission n'est pas définie, vous devez afficher la valeur 0. Le résultat de la requête doit être le même que celui illustré à la Fig. 3.5-1.

Riz. 3.5 -1 (valeurs indiquées à partir de la ligne 51)

Solution:

Le code de requête correspondant pourrait ressembler à ceci :

SELECT first_name AS "First Name", last_name As "Last Name", NVL (COMMISSION_PCT, 0) As "Commission Rate" FROM hr.employees.

Fonction NVL

La fonction NVL est généralement la plus utilisée. La fonction reçoit deux paramètres : NVL(expr1, expr2). Si le premier paramètre expr1 n'est pas NULL, alors la fonction renvoie sa valeur. Si le premier paramètre est NULL, alors la fonction renvoie la valeur du deuxième paramètre expr2 à la place.

Prenons un exemple pratique. Le champ COMM de la table EMP peut contenir des valeurs NULL. Lors de l'exécution d'une requête comme :

SELECT EMPNO, ENAME, COMM, NVL(COMM, 0) NVL_COMM

DE SCOTT.EMP

la valeur NULL sera remplacée par zéro. Notez que si une valeur est générée à l'aide d'une fonction, un alias lui est attribué. Les résultats de la requête ressembleront à :

EMPNO ENAME COMMUNICATION NVL_COMM
7369 FORGERON 0
7499 ALLEMANDE 300 300
7521 SALLE 500 500
7566 JONES 0
7654 MARTIN 1400 1400
7698 BLAKE 0
7782 CLARK 0
7839 ROI 0
7844 TOURNEUR 0 0
7900 JAMES 0
7902 GUÉ 0
7934 MEUNIER 0

Fonction CEIL(n)

La fonction CEIL renvoie le plus petit entier supérieur ou égal au nombre n passé en paramètre. Par exemple:

SÉLECTIONNER PLAFOND(100) X1, PLAFOND(-100) X2, PLAFOND(100.2) X3 , PLAFOND(-100.2) X4

DU DOUBLE

TRUNC(n[,m])

La fonction TRUNC renvoie le nombre n tronqué à m décimales. Le paramètre m peut être omis, auquel cas n est tronqué à un nombre entier.

SÉLECTIONNER TRUNC(100.25678) X1, TRUNC(-100.25678) X2, TRUNC(100.99) X3,

TRONC(100.25678, 2) X4

DU DOUBLE

Fonction SIGN(n)

La fonction SIGN détermine le signe d'un nombre. Si n est positif, la fonction renvoie 1. S'il est négatif, renvoie -1. S'il est égal à zéro, 0 est renvoyé. Par exemple :

SÉLECTIONNER SIGN(100.22) X1, SIGN(-100.22) X2, SIGN(0) X3

DU DOUBLE

Une caractéristique intéressante de cette fonction est la possibilité de passer m égal à zéro sans erreur de division par 0.

Fonction PUISSANCE(n, m)

La fonction POWER élève le nombre n à la puissance m. Le degré peut être fractionnaire et négatif, ce qui étend considérablement les capacités de cette fonction.

SÉLECTIONNER PUISSANCE(10, 2) X1, PUISSANCE(100, 1/2) X2,

PUISSANCE(1000, 1/3) X3, PUISSANCE(1000, -1/3) X4

DU DOUBLE

X1 X2 X3 X4
100 10 10 0,1

Dans certains cas, une exception peut se produire lors de l'appel de cette fonction. Par exemple:

SÉLECTIONNER LA PUISSANCE (-100, 1/2) X2

DU DOUBLE

Dans ce cas, une tentative est faite pour calculer la racine carrée d'un nombre négatif, ce qui entraînera une erreur ORA-01428 "Argument hors plage".

Fonction SQRT(n)

Cette fonction renvoie la racine carrée de n. Par exemple:

SÉLECTIONNER CARRÉ(100) X

DU DOUBLE

Fonctions EXP(n) et LN(n)

La fonction EXP élève e à la puissance n, et la fonction LN calcule le logarithme naturel de n (avec n doit être supérieur à zéro). Exemple:

SÉLECTIONNER EXP(2) X1, LN(1) X2, LN(EXP(2)) X3

Nous avons abordé les fonctions imbriquées un peu plus tôt, examinons-les maintenant un peu plus en détail. Nous examinerons également les fonctions pour travailler avec la valeur NULL et les fonctions qui aident à implémenter l'opération de branchement dans une requête.

fonctions imbriquées

Les fonctions imbriquées utilisent la valeur de retour d'une fonction comme paramètre d'entrée d'une autre fonction. Les fonctions renvoient toujours une seule valeur. Par conséquent, vous pouvez traiter le résultat d'un appel de fonction comme une valeur littérale lorsque vous l'utilisez comme paramètre d'un autre appel de fonction. Les fonctions de ligne peuvent être imbriquées jusqu'à n'importe quel niveau d'imbrication. Un seul appel de fonction ressemble à ceci

Fonction1(paramètre1, paramètre2, …) = résultat

Le remplacement d'un paramètre de fonction par un appel à une autre fonction peut entraîner des expressions telles que

F1(param1.1, F2(param2.1, param2.2, F3(param3.1)), param1.3)

Les fonctions imbriquées sont d'abord évaluées avant que leurs résultats ne soient utilisés comme valeurs d'entrée pour d'autres fonctions. Les fonctions sont évaluées du niveau d'imbrication le plus profond au plus haut de gauche à droite. L'expression précédente est exécutée comme suit

  1. La fonction F3(param1) est évaluée et la valeur de retour est utilisée comme troisième paramètre pour la fonction 2, appelons-la param2.3
  2. Ensuite, la fonction F2(param1, param2.2, param2.3) est évaluée et la valeur renvoyée est utilisée comme second paramètre de la fonction F1 - param1.2
  3. Enfin, la fonction F1(param1, param2, param1.3) est évaluée et le résultat est renvoyé au programme appelant.

Ainsi, la fonction F3 est au troisième niveau d'imbrication.

Envisagez une requête

sélectionnez next_day(last_day(sysdate)-7, 'tue') from dual ;

  1. Il y a trois fonctions dans cette requête, de bas en haut - SYSDATE, LAST_DAY, NEXT_DAY. La demande est faite comme ça
  2. La fonction imbriquée SYSDATE est exécutée. Il renvoie l'heure système actuelle. Disons que la date actuelle est le 28 octobre 2009
  3. Ensuite, le résultat de la fonction de second niveau LAST_DAY est calculé. LAST_DATE('28-OCT-2009') renvoie le dernier jour d'octobre 2009, c'est-à-dire le 31 octobre 2009.
  4. Puis sept jours sont soustraits à cette date - le 24 octobre est obtenu.
  5. Enfin, la fonction NEXT_DAY('24-OCT-2009', 'tue') est évaluée et la requête renvoie le dernier mardi d'octobre - qui dans notre exemple est 27-OCT-2009.

Il est assez difficile de comprendre et de construire des expressions complexes en utilisant de nombreux appels de fonctions imbriqués, mais cela vient avec du temps et de la pratique. Vous pouvez diviser ces expressions en parties et les tester séparément. La table DUAL est très utile pour tester les requêtes et les résultats des appels de fonction. Vous pouvez tester et déboguer de petits composants, qui sont ensuite combinés en une grande expression souhaitée.

Fonctions de la succursale

Les fonctions de branchement, également appelées IF-THEN-ELSE, sont utilisées pour déterminer le chemin d'exécution en fonction de certaines circonstances. Les fonctions de branche renvoient des résultats différents en fonction du résultat de l'évaluation de la condition. Dans le groupe de ces fonctions, il existe des fonctions pour travailler avec la valeur NULL : NVL, NVL2, NULLIF et COALESCE. Et aussi les fonctions générales représentées par la fonction DECODE et l'expression CASE. La fonction DECODE est une fonction Oracle, tandis que l'expression CASE est dans la norme ANSI SQL.

Fonction NVL

La fonction NVL vérifie la valeur d'une colonne ou d'une expression de n'importe quel type de données pour une valeur nulle. Si la valeur est NULL, elle renvoie une autre valeur par défaut non NULL, sinon la valeur d'origine est renvoyée.

La fonction NVL a deux paramètres obligatoires et la syntaxe est NVL(original, ifnull) où original est la valeur d'origine à vérifier et ifnull est le résultat renvoyé par la fonction si original est NULL. Le type de données des paramètres ifnull et original doit être compatible. Autrement dit, soit le type de données doit être le même, soit il doit être possible de convertir implicitement des valeurs d'un type à un autre. La fonction NVL renvoie une valeur du même type de données que le type de données du paramètre d'origine. Considérez trois requêtes

Requête 1 : sélectionnez nvl(1234) dans dual ;

Requête 2 : sélectionnez nvl(null, 1234) dans dual ;

Requête 3 : sélectionnez nvl(substr('abc', 4), 'Aucune sous-chaîne n'existe') dans dual ;

Étant donné que la fonction NVL nécessite deux paramètres, la requête 1 renverra une erreur ORA-00909 : nombre d'arguments non valide. La requête 2 renverra 1234 car NULL est en cours de vérification et il est NULL. La troisième requête utilise une fonction SUBSTR imbriquée qui tente d'extraire le quatrième caractère d'une chaîne de trois caractères, renvoie NULL et la fonction NVL renvoie la chaîne "Aucune sbustring n'existe".

La fonction NVL est très utile lorsque vous travaillez avec des nombres. Il est utilisé pour convertir les valeurs NULL en 0 afin que les opérations arithmétiques sur les nombres ne renvoient pas NULL.

Fonction NVL2

La fonction NVL2 fournit plus de fonctionnalités que NVL, mais gère également NULL. Il vérifie la valeur d'une colonne ou d'une expression de n'importe quel type pour une valeur nulle. Si la valeur n'est pas NULL, alors le deuxième paramètre est renvoyé, sinon le troisième paramètre est renvoyé, contrairement à la fonction NVL qui, dans ce cas, renvoie la valeur d'origine.

La fonction NVL2 a trois paramètres obligatoires et la syntaxe est NVL2(original, ifnotnull, ifnull), où original est la valeur à tester, ifnotnull est la valeur à renvoyer si original n'est pas NULL, et ifnull est la valeur à renvoyer si original est NUL. Les types de données des paramètres ifnotnull et ifnull doivent être compatibles et ils ne peuvent pas être de type LONG. Le type de données renvoyé par la fonction NVL2 est égal au type de données du paramètre ifnotnull. Regardons quelques exemples

Requête 1 : sélectionnez nvl2(1234, 1, 'a string') from dual ;

Requête 2 : sélectionnez nvl2(null, 1234, 5678) dans dual ;

Requête 3 : sélectionnez nvl2(substr('abc', 2), 'Not bc', 'No substring') from dual ;

Le paramètre ifnotnull de la requête 1 est un nombre et le paramètre ifnull est une chaîne. Étant donné que les types de données sont incompatibles, l'erreur "ORA-01722 : numéro invalide" est renvoyée. La requête deux renvoie un paramètre ifnull car l'original est NULL et le résultat est 5678. La requête trois utilise la fonction SUBSTR qui renvoie 'bc' et appelle NVL2('bc','Not bc','No substring') - qui renvoie un ifnotnull paramètre – 'Pas bc'.

Fonction NULLIF

La fonction NULLIF teste deux valeurs pour le même. S'ils sont identiques, NULL est renvoyé, sinon le premier paramètre est renvoyé. La fonction NULLIF a deux paramètres obligatoires et la syntaxe est NULLIF(ifunequal, comparison_item). La fonction compare deux paramètres, et s'ils sont identiques, elle renvoie NULL, sinon le paramètre ifunequal. Tenir compte des requêtes

Requête 1 : sélectionnez nullif(1234, 1234) dans dual ;

La première requête renvoie NULL car les paramètres sont identiques. Les chaînes de la requête 2 ne sont pas converties en date, mais sont comparées en tant que chaînes. Comme les chaînes sont de longueurs différentes, le paramètre ifunequal 24-JUL-2009 est renvoyé.

Dans la Figure 10-4, la fonction NULLIF est imbriquée dans la fonction NVL2. La fonction NULLIF utilise à son tour les fonctions SUBSTR et UPPER dans le cadre de l'expression du paramètre ifunequal. La colonne EMAIL est comparée à cette expression qui renvoie la première lettre du prénom concaténée avec le nom de famille pour les employés dont le prénom comporte 4 caractères. Lorsque ces valeurs sont égales, NULLIF renverra NULL, sinon il renverra la valeur du paramètre ifunequal. Ces valeurs sont utilisées comme paramètre pour la fonction NVL2. NVL2, à son tour, renvoie une description indiquant si les éléments comparés correspondent ou non.

Figure 10-4 - Utilisation de la fonction NULLIF

Fonction COALESCE

La fonction COALESCE renvoie la première valeur non NULL de la liste de paramètres. Si tous les paramètres sont NULL, NULL est renvoyé. La fonction COALESCE a deux paramètres obligatoires et un nombre quelconque de paramètres facultatifs, et la syntaxe est COALESCE(expr1, expr2, ..., exprn) où le résultat est expr1 si la valeur de expr 1 n'est pas NULL, sinon le résultat est expr2 s'il n'est pas NULL, et ainsi de suite. COALESCE a la même signification que les fonctions NVL imbriquées

COALESCE(expr1, expr2) = NVL(expr1, expr2)

COALESCE(expr1, expr2, expr3) = NVL(expr1,NVL(expr2, expr3))

Le type de données de la valeur renvoyée si une valeur non NULL est trouvée est égal au type de données de la première valeur non NULL. Pour éviter l'erreur 'ORA-00932 : types de données incohérents', tous les paramètres non NULL doivent être compatibles avec le premier paramètre non NULL. Prenons trois exemples

Requête 1 : sélectionnez coalesce(null, null, null, 'a string') from dual ;

Requête 2 : sélectionnez coalesce(null, null, null) à partir de dual ;

Requête 3 : sélectionnez coalesce(substr('abc', 4), 'Not bc', 'No substring') from dual ;

La requête 1 renvoie le quatrième paramètre : une chaîne, car il s'agit du premier paramètre non NULL. La requête deux renvoie NULL car tous les paramètres sont NULL. La requête 3 évalue le premier paramètre, obtient NULL et renvoie le deuxième paramètre car il s'agit du premier paramètre non NULL.

Les paramètres de la fonction NVL2 peuvent prêter à confusion si vous êtes déjà familiarisé avec la fonction NVL. NVL(original, ifnull) renvoie original si la valeur n'est pas NULL, sinon ifnull. NVL2(original, ifnotnull, ifnull) renvoie ifnotnull si original n'est pas null sinon ifnull. La confusion vient du fait que le deuxième paramètre de la fonction NVL est ifnull, alors que NVL2 a ifnotnull. Ne vous fiez donc pas à la position du paramètre dans la fonction.

Fonction DECO

La fonction DECODE implémente la logique if-then-else en vérifiant l'égalité des deux premiers paramètres et en renvoyant la troisième valeur s'ils sont égaux, ou une valeur différente sinon. La fonction DECODE a trois paramètres obligatoires et la syntaxe est DECODE(expr1, comp1, iftrue1, , ). Ces paramètres sont utilisés comme indiqué dans l'exemple de pseudocode suivant.

SI expr1=comp1 alors retourne iftrue1

Sinon si expr1=comp2 alors retourne iftrue2

Sinon si exprN=compN alors retourne iftrueN

Sinon, retournez NULL|iffalse ;

Tout d'abord, expr1 est comparé à comp1. S'ils sont égaux, iftrue1 est renvoyé. Si expr1 n'est pas égal à comp1, alors ce qui se passe ensuite dépend si les paramètres comp2 et iftrue2 sont spécifiés. Si elle est donnée, alors la valeur de expr1 est comparée à comp2. Si les valeurs sont égales, alors iftrue2 est renvoyé. Si ce n'est pas le cas, alors s'il y a des paires de paramètres compN, iftrueN, expr1 et compN sont comparés, et si vrai, iftrueN est renvoyé s'il est égal. Si aucune correspondance n'a été trouvée dans un ensemble de paramètres, alors soit iffalse est renvoyé si ce paramètre a été spécifié, soit NULL.

Tous les paramètres de la fonction DECODE peuvent être des expressions. Le type de la valeur de retour est égal au type du premier validateur - le paramètre comp 1. Expression expression 1 convertit implicitement en type de données de paramètre comp1. Tous les autres Options disponibles composition 1 … compN sont aussi implicitement convertis en type comp 1. DECODE traite une valeur NULL comme égale à une autre valeur NULL, c'est-à-dire si expr1 est NULL et comp3 est NULL et comp2 n'est pas NULL, alors iftrue3 est retourné. Regardons quelques exemples

Requête 1 : sélectionnez decode(1234, 123, '123 est une correspondance') à partir de dual ;

Requête 2 : sélectionnez decode(1234, 123, '123 est une correspondance', 'Pas de correspondance') à partir de dual ;

Requête 3 : sélectionnez decode('search', 'comp1', 'true1', 'comp2', 'true2', 'search', 'true3', substr('2search', 2, 6), 'true4', ' faux') de double ;

La première requête compare les valeurs 1234 et 123. Puisqu'elles ne sont pas égales, iftrue1 est ignoré, et puisque iffalse n'est pas défini, NULL est renvoyé. La requête deux est identique à la requête 1 sauf que la valeur iffalse est définie. Puisque 1234 n'est pas égal à 123, iffalse - 'No match' est renvoyé. La troisième requête vérifie les valeurs des paramètres par rapport à la valeur de recherche. Les paramètres comp1 et comp2 ne sont pas égaux à 'search' donc les résultats de iftrue1 et iftrue2 sont ignorés. Une correspondance est trouvée dans la troisième opération de comparaison d'éléments comp3 (position de paramètre 6) et la valeur de retour de iftrue3 (paramètre 7) est 'true3'. Puisqu'une correspondance est trouvée, aucun autre calcul n'est effectué. Autrement dit, malgré le fait que la valeur de comp4 (paramètre 8) corresponde également à expr1, cette expression n'est jamais évaluée car la correspondance a été trouvée dans la comparaison précédente.

Expression CAS

Tous les langages de programmation de troisième et quatrième génération implémentent la construction de cas. Comme la fonction DECODE, l'expression CASE vous permet d'implémenter une logique if-then-else. Il existe deux options pour utiliser l'expression CASE. Une simple instruction CASE définit l'élément source à comparer une fois, puis répertorie toutes les conditions de test nécessaires. CASE complexe (recherché) évalue les deux instructions pour chaque condition.

L'expression CASE a trois paramètres obligatoires. La syntaxe d'une expression dépend du type. Pour une expression CASE simple, cela ressemble à ceci

CASE search_expr

QUAND expr_comparaison1 ALORS iftrue1

}