Analyse des différences des fonctions NVL et COALESCE dans la base de données Oracle
Les fonctions NVL et COALESCE renvoient des valeurs non nulles, mais il existe des différences subtiles mais importantes entre elles.
Modernisation et standardisation
COALESCE est une fonction plus moderne d'Oracle Database qui est conforme à la norme SQL ANSI-92. En revanche, NVL est une fonction spécifique à Oracle antérieure à la norme.
Synonymité de deux paramètres
NVL et COALESCE se comportent comme des synonymes de deux valeurs. Cependant, cette équivalence ne s’applique qu’à deux paramètres.
Comportement d'évaluation
La principale différence réside dans leur comportement d'évaluation. NVL évalue toujours ses deux arguments, que le premier argument soit vide ou non. COALESCE, en revanche, arrête généralement d'évaluer lorsqu'il rencontre le premier argument non nul. Cette différence peut affecter considérablement les performances dans certains cas.
L'exemple suivant illustre ce contraste de manière frappante. Considérez la requête suivante :
<code class="language-sql">SELECT SUM(val) FROM ( SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val FROM dual CONNECT BY level < 10000 )</code>
Ici, NVL calcule deux paramètres pour chaque ligne même si 1 n'est pas vide pour toutes les lignes. Cela entraîne des temps d’exécution des requêtes assez longs.
Utilisez plutôt la requête suivante avec COALESCE :
<code class="language-sql">SELECT SUM(val) FROM ( SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val FROM dual CONNECT BY level < 10000 )</code>
reconnaîtra que 1 est non nul et évitera de calculer le deuxième argument, réduisant ainsi considérablement le temps d'exécution.
Pour résumer, bien que NVL et COALESCE se ressemblent pour deux valeurs, le comportement d'évaluation optimisé de COALESCE en fait le choix préféré lorsqu'il s'agit de plusieurs valeurs potentiellement nulles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!