en lisant la différence entre la fonction de décodage et lorsque code> Déclaration, je suis confus, tout en comprenant que si les deux donnent le même résultat pour une équation simple comme ci-dessous:
DECODE(col1, 'ABC', 'DEF', 'OTHERS' ) AS COL2
CASE WHEN COL1 = 'ABC' THEN 'DEF'
ELSE 'OTHERS'
END AS COL2
3 Réponses :
Je suis à peu près sûr que Aucune différence, ils feront tous les deux le même travail, mais Mais, pour des choses simples, tout va bien. Enregistre un peu de dactylographie. P> case code> n'existait pas dans les versions de base de données Pre-9i Oracle afin que vous forts> a dû forte> utiliser
décodage code>. p>
décode code> peut atteindre un vrai monstre em> lorsque des choses complexes doivent être effectuées, avec une décodage
imbriquée code> s donc vous savez probablement ce que vous faites tout en faisant En tapant cette déclaration, mais un mois plus tard, vous avez des problèmes profonds, car vous ne savez pas ce qui appartient à ce qui appartient à ce qui fait partie de la fermeture de la fermeture de la fermeture ouverte, du vrai cauchemar. P>
en SQL, il n'y a pas de "déclaration de cas". Votre exemple est un cas La documentation étage "Une expression est une combinaison d'une ou plusieurs valeurs, opérateurs et fonctions SQL qui évalue à une valeur". Donc, une fonction SQL n'est pas différente d'une expression, c'est un type d'expression spécifique. P> Notez que code> expression strong>. (
Case Code> Les instructions existent dans PL / SQL.)
décodez code> et
Case code> se comporte différemment lorsque la comparaison de null Valeurs:
Decode CODE> considère que deux nulls sont "identiques", ce qui constitue une exception à la règle qui comparant un null à tout ait un résultat "inconnu". P>
with data(a, b) as (
select 1,1 from dual union all
select 1,null from dual union all
select null,1 from dual union all
select null, null from dual
)
select a, b,
decode(a,b,'same','different') decode_result,
case when a = b then 'same' else 'different' end case_result
from data;
A B DECODE_RESULT CASE_RESULT
------ ------ ------------- -----------
1 1 same same
1 (null) different different
(null) 1 different different
(null) (null) same different
En fait de nombreux sites Web, y compris la pile débordement ( Stackoverflow.com/questions/3193692/cast-vs-decode ) avait Les utilisateurs suggérant que l'affaire est une déclaration, alors je suis confus. Votre explication indique clairement, merci.
Une fonction est simplement une fonctionnalité capillée. Avec une fonction, vous pouvez appeler une fonctionnalité de n'importe où sans l'orthographier avec précicient. Il existe des fonctions prédéfinies telles que Une déclaration est quelque chose comme La déclaration est (tant que vous n'êtes pas dans un bloc a >, qui elle-même peut contenir plusieurs déclarations) une commande que vous envoyez à la base de données, une fonction est une sorte d'instruction quoi faire avec les arguments donnés. P> décodage () code> ou vous pouvez Définir des fonctions vous-même . P>
Sélectionnez 1 à partir de Dual code> et peut contenir des fonctions (
Sélectionnez décodage (Col1, '1', 'Oui', 'Non') de MyTable code> ). p>
cas code> est une expression i>, pas une déclaration
Merci. De nombreux sites Web, y compris les utilisateurs suggérant que les utilisateurs suggèrent des utilisateurs, donc je me suis confus.