0
votes

Quelle est exactement la différence entre une «déclaration» et une «fonction» dans Oracle SQL?

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


2 commentaires

cas est une expression , 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.


3 Réponses :


0
votes

Je suis à peu près sûr que case n'existait pas dans les versions de base de données Pre-9i Oracle afin que vous a dû utiliser décodage .

Aucune différence, ils feront tous les deux le même travail, mais cas est plus simple à maintenir. décode peut atteindre un vrai monstre lorsque des choses complexes doivent être effectuées, avec une décodage imbriquée 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.

Mais, pour des choses simples, tout va bien. Enregistre un peu de dactylographie.


0 commentaires

0
votes

en SQL, il n'y a pas de "déclaration de cas". Votre exemple est un cas code> expression strong>. ( Case Code> Les instructions existent dans PL / SQL.)

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 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


1 commentaires

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.



0
votes

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 décodage () ou vous pouvez Définir des fonctions vous-même .

Une déclaration est quelque chose comme Sélectionnez 1 à partir de Dual et peut contenir des fonctions ( Sélectionnez décodage (Col1, '1', 'Oui', 'Non') de MyTable ).

La déclaration est (tant que vous n'êtes pas dans un bloc , 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.


0 commentaires