Bonjour, j'ai besoin d'aide pour comprendre la partie décodante d'une requête qui va quelque chose comme ce qui suit. Étant donné que cette requête ne renvoie qu'une seule requête, je suis un peu souples sur la façon dont le Commande par fonctionne avec les différents numéros de colonne non existants fournis par décodage. La requête fonctionne comme un curseur pour trouver un code unique pour l'animal en question donnée à un animal mnémonique du type animal actuel et le type à assortir. P> Je pense que le décodage renvoie les différents numéros de colonne Pour commander avec et j'ai essayé d'expérimenter une autre colonne simple simple sélectionne sur certaines autres tables avec la commande par '-1' ',' 0 'et' 100 'et la commande par semble échouer pour 0 et 100. Pourquoi ça marche Avec -1 ou l'un des autres chiffres? P> J'espère que quelqu'un peut me l'expliquer. Merci! P> p>
3 Réponses :
Cela crée l'ensemble qui sera utilisé pour la commande. P>
Si animal_type = l_type_to_be_matched, utilisez A -1 comme valeur de tri de cette ligne
sinon si animal_type = l_current_type, utilisez 0 comme valeur de tri de cette ligne
sinon si axt.type_search_priority est NULL, utilisez 100 comme valeur de tri de cette ligne
Sinon utilise axt.type_search_Priority comme valeur de tri de cette ligne. p>
Cela donne une sorte de cirteria de tri conditionnel. Souvent utilisé pour s'assurer que certains éléments sont toujours en haut ou en bas d'un ensemble de tri. P>
Merci de répondre! Donc, cela signifie que si la ligne actuelle est un couguar, c'est-à-dire grand chat, il sera défini comme 0 qui le mettra toujours à la 2e rangée à partir et quand je rencontre une rangée «chat domestique», c'est-à-dire un type «CAT», ce sera définir comme -1 c'est-à-dire que ce sera sur mon ensemble. Et si je suis sur une ligne qui n'a pas de recherche_priority, ce sera sur le bas de la liste, c'est-à-dire 100. Mon compréhension est-il correct?
Oui, c'est l'idée. Voici un autre message qui décrit faire la même chose: Orindasoft .com / Public / Blog / 2007/07 / ORACLES-DECODE-FUNTION.HT ML
La commande par peut utiliser l'une des trois expressions. Premièrement, un alias de la liste de sélection, deuxièmement, le numéro d'une colonne dans la liste Select ou une troisième partie d'une expression SQL pouvant utiliser des colonnes zéro ou plus à partir des tables source.
Alors quand vous utilisez Ordre par substrateur (col, 2,10) Vous commandez par une sous-chaîne de 10 caractères de la valeur de colonne à partir du deuxième caractère. P>
De même lorsque vous utilisez P>
ORDER BY decode(col,'DOG','A','CAT','B','EEL', 'C', 'D')
Se référant à cette partie de votre question:
Je pense que le décodage retourne le différents numéros de colonne à commander par avec et j'ai essayé d'expérimenter avec un Différente colonne simple simple sélectionne sur d'autres tables avec commande par '-1', '0' et '100' et l'ordre par semble échouer pour 0 et 100. Pourquoi cela fonctionne avec -1 ou l'un des autres chiffres? p> blockQuote>
Votre confusion est compréhensible; Mais non, les valeurs renvoyées par le décodage ne sont pas interprétées comme des numéros de colonne. P>
Oracle prend en charge un peu de raccourci syntaxique dans lequel les colonnes de l'ensemble de résultats peuvent être mentionnées positionnées dans une clause d'ordre. Donc, par exemple, ceci: p>
xxx pré> est identique à celui de: p>
xxx pré> Cependant, cette notation de position ne peut être effectuée que avec littéraux entiers non négatifs. Si la commande comprend une expression qui produit une valeur numérique, elle ne sera pas interprétée comme un numéro de colonne, mais comme une valeur réelle à trier. En outre, les littéraux numériques négatifs sont interprétés comme des valeurs de tri et non comme des numéros de colonne. P>
Sélectionnez * à partir de la commande de tableau par -1 code> trier toutes les lignes de la valeur constante -1 (efficacement pas de tri). p>
Sélectionnez * à partir de la commande de tableau par 0 code> retournera une erreur car 0 est un numéro de colonne non valide. P>
Sélectionnez * commande de table par 1 code> triera toutes les lignes sur la valeur de la première colonne de la table. p>
Sélectionnez * à partir de la commande de table par 100 code> trier toutes les lignes sur le valeur de la 100ème colonne de la table ou renvoyez une erreur s'il y a moins de 100 colonnes. p>
Sélectionnez * à partir de la commande de table par to_number ('1') code> triera tout rangées sur la valeur constante 1. p>
Je n'ai pas testé cela à fond, mais en regardant certains plans d'exécution, il semble que vous puissiez même spécifier un littéral numérique non entier, et il sera arrondi et utilisé comme numéro de colonne. p>
Sélectionnez * à partir de la commande de tableau par 1.5 code> semble trier sur la valeur e de la première colonne. p> p>