oracle: pouvez-vous utiliser DÉCODER entre les tables?
assez nouveau pour la fonction, mais ce que je comprends DÉCODER les tests de l'attribut spécifié (arg1) contre une autre valeur spécifiée (arg2) et si elles correspondent, il affiche un résultat (arg3) sinon si elle ne correspond pas, la valeur par défaut de l'affichage (arg4)
DECODE(firstname,'John','last is doe','I don't know the last name')
Pouvez-vous faire cela à l'aide de données provenant d'une autre table pour émuler une jointure? comme
DECODE(publisherid, publisher.pubid, publisher.name,'unknown')
Je suis en train de l'essayer, mais il ne fonctionne pas. je ne savais pas si c'était possible ou peut-être je suis juste de faire le mal. Toutes les pensées?
- Pouvez-vous montrer l'intégralité de l'instruction de la requête?
Vous devez vous connecter pour publier un commentaire.
La 11g documentation stipule que les paramètres de recherche peut être une expression, donc ce que vous avez devrait fonctionner. Si vous obtenez des erreurs ORA, vous devez nous le faire savoir. Sinon, il est probable que vous n'avez pas les données de match, ou de l'éditeur.nom de la colonne est null...
Vous ne l'utilisez pas pour émuler une jointure -- vous voulez toujours fait REJOINDRE (ANSI 89 ou 92 de la syntaxe, mais de préférence 92) les tables de manière appropriée ou vous allez avoir affaire avec beaucoup de déchets des lignes à partir d'un produit cartésien qui les DÉCODE puis exécute sur.
Sauf si vous êtes sur la pré-9i (8.1.6, selon Demander à Tom), je ne voudrais pas perdre votre temps à DÉCODER et à l'utilisation de l'ANSI CAS énoncé au lieu:
Vous pouvez l'utiliser entre les colonnes de différentes tables de la sorte:
En théorie, vous pouvez l'utiliser comme une condition de jointure
mais il n'est pas commun. Une condition est une valeur booléenne (true/false) et un décodage renvoie un nombre ou un caractère, de sorte que le décodage est un peu redondant (ou peut probablement être ré-écrit pour être plus clair).
Autant que la syntaxe est concerné, vous l'avez correcte. Si vous obtenez toujours "inconnu" comme suite à la sortie de votre publisherid et de vérifier si vous l'avez dans le tableau.
Si ID-s sont des champs de texte, notez que le décodage est sensible à la casse. Vérifiez également si vous avez peut-être garnis id quelque part.
Utilisation
DECODE
lorsqu'une des conditions suivantes est remplie:En bref, ne pas utiliser de DÉCODER à tous. Il n'y a rien, il ne peut faire que ne pouvait pas être fait avec un
CASE/WHEN
. Oui, il y aura plus de taper sur le clavier, et il "vaut" il.Cela dit, il y a une poubelle cas lorsque je préfère toujours
DECODE
, qui a à voir avec la façon dont il traite avecNULL
. Le scénario est alors que j'ai deux (espérons-le) de tableaux identiques avec la même clé, et quand je veux savoir s'il y a des lignes où les deux tables ne sont pas d'accord sur la valeur d'une colonne.Par exemple, disons que vous avez réécrit un lot de la procédure pour des raisons de performances, et vous voulez vous assurer que la nouvelle version du produit les mêmes résultats que l'ancienne version. Dans cette situation, vous pourriez envisager
NULL
etNULL
être la même "valeur".DECODE
arrive à se comporter comme ça.traduirait pour le cas suivant/lors de la construction de
Voici un exemple de ce que je veux dire
Donc, pour trouver la différence que je ferais: