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

Comment utiliser le décodage dans Oracle

Introduction au décodage Oracle SQL

Dans cette section, nous discuterons du traitement de décodage d'Oracle, qui est un aspect très important de l'instruction SQL d'Oracle

Oracle decode est la méthode de la base de données Oracle pour transformer les valeurs de données d'une valeur à une autre qu'il est préférable de comprendre. Oracle Decode transforme les valeurs de données au moment de la récupération.

C'est un type de Si alors sinon pour le traitement

Le bloc de code pour Oracle sql Decode est ci-dessous

decode(expression or column name, match, result [,match, result]…[,default] )

Voici la signification des termes dans le code ci-dessus
a) l'expression ou la colonne est la valeur à comparer
b) la correspondance est la valeur qui est comparée à l'expression
c) le résultat est la valeur renvoyée, si expression est égale à match
d) default est facultatif. Si aucune correspondance n'est trouvée, le décodage renverra par défaut. Si la valeur par défaut est omise, l'instruction de décodage renverra NULL (aucune correspondance trouvée).

Exemple

sélectionnez
décoder (
Code de phase,
'P','En attente',
'C','Terminé',
'T',' Terminé',
'S','Veille',
'INCONNU'
)
de
FND_REQUESTS ;

Voici l'algorithme pour mieux le comprendre

1) Oracle récupère la valeur de colonne du code de phase
2) si le code de phase = 'P' alors en attente
3) si le code de phase = 'C'  alors terminé
4) si le code de phase ='T'  puis Terminé
5) si le code de phase = 'S'  alors Veille
6) Si le code de phase n'est ni l'un ni l'autre ci-dessus, le décodage renvoie Inconnu
7) Si la valeur par défaut n'est pas présente cela donnera null

Notez que le décodage Oracle commence par spécifier le nom de colonne ou l'expression , suivi d'un ensemble de paires appariées de valeurs de transformation. À la fin de l'instruction de décodage, nous trouvons une valeur par défaut. La valeur par défaut indique à décoder ce qu'il faut afficher si une valeur de colonne n'est pas dans la liste appariée.

On pourrait dire l'algorithme comme ça

if (expr ==search1)
return(result1);
elseif (expr ==search2)
return( result2);
…elseif (expr ==searchn)
return(resultn);
else
return(default);

Quelques points supplémentaires à retenir pour Oracle Decode

1) Dans une fonction DECODE, Oracle considère que deux valeurs nulles sont équivalentes. Si expr est nul, alors Oracle renvoie le résultat de la première recherche qui est également nul.

SQL> SELECT decode(null,null,1,0) FROM dual ;
DECODE(NULL,NULL,1,0)
———————
1

2) Le nombre maximum de composants dans la fonction DECODE, y compris expr, recherches, résultats et défaut, est de 255.

3) Oracle convertit automatiquement les valeurs d'expression et compare_value en type de données de la première compare_value. Le type de données de la return_value est également converti dans le type de données de la première return_value. Si le premier résultat a le type de données CHAR ou si le premier résultat est nul, alors Oracle convertit la valeur de retour en type de données VARCHAR2

Comment lire le décodage dans Oracle

nous pouvons lire l'instruction de décodage comme une instruction if-else if. Le premier argument de l'instruction de décodage sera généralement une colonne où la transformation des données est nécessaire. L'argument suivant comparera les valeurs du premier argument avec lui

FAQ sur le traitement Oracle sql Decode

(1)Nous avons vu que "expr" étant assimilé à des valeurs spécifiées, pouvons-nous utiliser des opérateurs d'inégalité comme> ou

Prenons un exemple
SELECT DECODE(salary,<50000, sal + 1000, sal + 500) Final_salary FROM emp;
ERREUR à la ligne 2
ORA-00936 :expression manquante
Nous ne pouvons donc pas l'utiliser. Nous devons utiliser une instruction case pour le faire. ou nous pouvons signer la fonction dans decode pour y parvenir
SELECT DECODE(sign(salary- 50000), -1,sal + 1000, sal + 500) Final_salary FROM emp;
Fondamentalement, nous devons convertir notre exigence d'une formule qui peut évaluer à une certaine valeur

(2) Comment comparer deux valeurs de colonne à l'aide du décodage Oracle ?

SELECT col1,col2 decode( abs(col1-col2), 0, ‘col1 =col2’,Col1-col2, ‘col1> col2′,’col1 FROM example_tab;

(3) Quelle est la différence entre Decode et CASE

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.
CASE attend la cohérence du type de données, DECODE ne le fait pas
CASE attend le type de données cohérence, DECODE ne fonctionne pas
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.

(4) Le décodage oracle a-t-il une limite

Oui Le nombre maximum de composants dans la fonction DECODE, y compris expr, recherches, résultats et défaut, est de 255.

Liens connexes
Documentation Oracle sur le décodage
Comment écrire des requêtes SQL
Instruction SQL de base
Instruction de cas Oracle expliquée avec des conseils et des exemples
Tutoriel SQL