Bonjour,

Je souhaite insérer des données dans une table à partir d'un SELECT. Cependant, je veux insérer uniquement les n premières valeurs en fonction d'un critère (d'où une imbrication de requêtes pour combiner le ORDER BY puis le ROWNUM < n)
Jusque là le problème est classique, mais... pour pouvoir insérer ces données dans ma table, il faut que je fasse appel à une séquence pour chaque ligne remontée. Malheureusement les appels de séquences ne semblent pas pouvoir être utilisés dans des sous-requêtes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
SELECT *
FROM (
   SELECT col1, col2, col3, masequence.nextval
   FROM matable
   ORDER BY col1
)
WHERE ROWNUM < n
Cette requête est incorrecte, car l'utilisation d'une séquence n'est pas autorisée ici.
J'ai essayé d'imbriquer le SELECT avec la séquence dans une autre sous-requête, sans le ORDER, mais le problème est le même.

Existe t-il une solution pour utiliser à la fois le ROWNUM, ORDER BY et une séquence, sans passer par un parcours itératif ?

Merci