Requête SQL pour renvoyer N lignes à partir de dual
Je veux écrire une requête SQL qui accepte une liaison variable (disons :NUM), et la sortie se compose d'une colonne & :NUM nombre de lignes, chaque ligne ayant son numéro de ligne. c'est à dire si l'on fait passer :NUM 7, la sortie doit être:
VAL
====
1
2
3
4
5
6
7
Il ne devrait pas y avoir de réelle DB tables dans la requête et pas de code PL/SQL doit être utilisé. c'est à dire uniquement dual doivent être utilisés dans la requête
Est-il un moyen pour y parvenir?
source d'informationauteur Harish
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser:
...mais la table doit contenir la ligne égale ou supérieure à la limite de la liaison variable. Ce lien montre les différentes numéro de ligne à des techniques de production dans Oracle.
À l'aide de
CONNECT BY
Oracle 10g+:Confirmé par
monojohnny
que la liaison de la variable peut être utilisée. Les tentatives pour s'exécuter sur Oracle 9i, siCONNECT BY
en charge la syntaxe des résultats dans un ORA-01436 erreur.La seule chose que je ne suis pas 100% sur, c'est si le CONNECTER PAR la volonté d'accepter la limite de la liaison variable.
Référence:
Essayez quelque chose comme:
C'est salissant, mais il va faire l'affaire.
Édité: Ah - vous besoin de passer par une variable pour vous permettre de savoir à quelle hauteur...
Alors, comment au sujet de quelque chose comme:
Ok... édition de nouveau, maintenant, AVEC l'aide de:
Je n'ai pas eu cette réponse [ donc, assurez-vous que tous les votes aller dans le bon sens!!] il est juste que mes notes des tests basés sur des "OMG Poneys' [qui n'était pas sûr de savoir si la méthode de travail avec la liaison de la variable] ci-dessus pour référence:
De la requête, sans se connecter par
Je suis marquage ce wiki de la communauté car il n'a pas vraiment répondre à votre exigence pour les tables non, mais l'une des premières choses que nous faisons lors de l'installation d'une base de données est de créer un ensemble de tables pour ce genre de but.
En faisant cela, nous avons considérablement réduire la complexité, et d'augmenter la vitesse d'un grand nombre de nos questions sur le coût de la minimale (et bon marché) de l'espace disque.
Vous devriez réfléchir sérieusement à cela. Outre le maintien de la date de la table, il n'y a pas beaucoup d'entretien nécessaires.
Une autre solution serait d'une PL/SQL pour créer une fonction pour retourner une collection avec les lignes... Pas aussi simple que le
select level from dual connect by level <= :b1
approche, mais il est utile que dans quelques situations:1) Créer une table de nombre de type d'objet ( number_tbl, dans cet exemple ) :
2) Créer une fonction qui va recevoir le nombre de lignes à générer, et ensuite de retour à un number_tbl objet avec les résultats:
3) sélectionnez à partir de votre fonction à l'aide de la
table( ... )
fonction pour activer votre number_tbl objet en quelque chose de sélection:connecter par exemple est une chose merveilleuse. Il vous permet de générer plusieurs lignes avec un seul ensemble de données disponibles dans la double table. Cela peut vous aider à générer d'énormes pas de lignes pour vos données factices. Par exemple
ou vous pouvez faire quelque chose comme ceci
Exemple 2 : Vous voulez imprimer le carré et le cube d'un nombre de 1 à 10.
Donc vous pouvez le manipuler dans la forme que vous désirez. C'est comment vous pouvez retourner plusieurs lignes à partir de la double table.
Références : http://www.oraclebin.com/2012/12/multipe-rows-from-dual-table.html
Un autre moyen est d'utiliser une requête XQuery expression de la plage, par exemple:
Cette solution est assez flexible, par exemple:
Dépend de la base de données de diverses méthodes peuvent être utilisées.
PostgreSQL a une fonctionnalité intéressante -- série.
Pour obtenir ce que vous voulez voulez juste: