Comment puis-je créer une “dynamique” clause where?
D'Abord: Merci!
J'ai fini mon autre projet et la grosse surprise: maintenant, tout fonctionne comme il se doit 🙂
Grâce à quelques penseurs de la SORTE!
Donc ici, je aller avec le prochain projet.
Je voudrais obtenir quelque chose comme ceci:
SELECT * FROM tablename WHERE field1=content AND field2=content2 ...
Comme vous l'avez remarqué, cela peut être une très longue clause where.
tablename est une propriété statique qui ne change pas.
field1
, field2
, ... (!) et le contenu peut changer.
J'ai donc besoin d'une option pour créer une instruction SQL PL/SQL à l'intérieur d'une fonction récursive.
Je n'ai pas vraiment savoir quoi chercher, donc je demande ici pour des liens ou même un mot pour rechercher..
Veuillez ne pas commencer à argumenter sur que la fonction récursive est vraiment nécessaire, ou ce que ses disadvanteges - c'est pas en question 😉
Si vous pouviez m'aider à créer quelque chose comme un SQL-Chaîne, qui sera ensuite en mesure de réussir à SÉLECTIONNER ce serait très gentil!
Iam en mesure de passer par la fonction récursive et de faire une plus longue chaîne à chaque fois, mais je ne peux pas faire une instruction SQL à partir d'elle..
Oh, encore une chose supplémentaire:
Je reçois les champs et les matières par une xmlType (xmldom.domdocument etc) je peux obtenir le champ et le contenu par exemple dans un clob de la xmltype
OriginalL'auteur TheChange | 2010-03-25
Vous devez vous connecter pour publier un commentaire.
L'objet est d'assembler dynamiquement une déclaration à partir d'un nombre variable de filtres dans la clause where. Je ne suis pas sûr de l'endroit où la récursivité s'inscrit dans tout cela, donc je vais juste utiliser un tableau pour gérer les paramètres:
Ce tableau est transmis à une fonction qui boucle autour de la matrice. Pour chaque entrée dans le tableau, il ajoute une ligne à la clause where dans le format <nom> = '<valeur>'. Probablement, vous aurez besoin de plus sophistiqué, filtrage des différents opérateurs, explicite conversion de types de données, variables de liaison - mais c'est l'idée générale.
Enfin pour exécuter cette requête nous avons besoin pour remplir une variable locale de type tableau et de retourner le résultat d'un curseur ref.
modifier
Dans le dernier paragraphe de la question de l'OP dit qu'ils sont l'utilisation de XML pour transmettre les critères. Cette exigence n'est pas radicalement changer la forme de mon original de mise en œuvre. La boucle doit simplement pour chasser une requête XPath au lieu d'un tableau:
Comme on peut le voir, cette version renvoie les mêmes résultats qu'avant...
OriginalL'auteur APC
Un moyen utile d'utiliser le SQL dynamique, comme indiqué dans les autres réponses et toujours à lier les variables (ce qui est une bonne pratique est d'utiliser une clause de lier les variables. Cela sert à deux fins: d'abord, il permet de lier l'ensemble de vos variables à chaque fois, que vous les utilisiez ou non; en second lieu, il permet de vous référer à votre lie par nom, donc si vous avez besoin de faire référence à l'un plus d'une fois, vous n'avez qu'à lier qu'une seule fois.
Un exemple:
OriginalL'auteur Allan
Vous pouvez créer un curseur, puis de créer une chaîne sql dynamique et ensuite utiliser
ou
vous pouvez utiliser
OriginalL'auteur HamoriZ
SELECT * from emp
OÙ (1 = 1 OU job = 'VENDEUR')
http://www.akadia.com/services/dyn_modify_where_clause.html
découvrez ce merveilleux article.
OriginalL'auteur Awais
En PLSQL vous pouvez faire quelque chose comme ceci:
OriginalL'auteur Rene