Sous Oracle, le langage SQL ne comporte pas la fonction LIMIT, bien utile pour paginer les résultats d'une requête SELECT. Afin de pallier à cette absence, il est possible d'utiliser la pseudo-colonne ROWNUM.
Ainsi, pour ne prendre en compte que la 1ère ligne de résultats d'un SELECT:
SELECT <colonne_1>, <colonne_n>FROM <table_1>, <table_n> WHERE <conditions> AND ROWNUM = 1;
SELECT <colonne_1>, <colonne_n>FROM <table_1>, <table_n> WHERE <conditions> AND ROWNUM BETWEEN 10 AND 20;

Comments
voilà ce que pear::db fait pour simuler le limit avec oracle
pour une requête initiale comme ça :
SELECT colonne1, colonne2
FROM table1
WHERE conditions
si on veut seulement les lignes entre x et y, il faut la transformer ainsi :
SELECT colonne1, colonne2
FROM (SELECT rownum as linenum, colonne1, colonne2
FROM table1
WHERE conditions
)
WHERE linenum BETWEEN x AND y
voilà ce que pear::db fait pour simuler le limit avec oracle
pour une requête initiale comme ça :
SELECT colonne1, colonne2
FROM table1
WHERE conditions
si on veut seulement les lignes entre x et y, il faut la transformer ainsi :
SELECT colonne1, colonne2
FROM (SELECT rownum as linenum, colonne1, colonne2
FROM table1
WHERE conditions
)
WHERE linenum BETWEEN x AND y
Cela semble marcher mais pas n'importe quand
J'essaie cette astuce (incroyable qu'il n'y a pas de LIMIT dans Oracle) dans SQL Tools - résultat, cela marche quand BETWEEN 1 AND 200 (par exemple), mais cela ne marche pas pour tout autre cas du rang de départ (BETWEEN 10 AND 200 ne marche pas par exemple).
Bizarre, ou qq chose que je n'ai pas compris
C'est normal, comme expliqué
Fonctionne très bien sous
Fonctionne très bien sous Oracle 10g.
Merci de l'astuce !
d'autan que group by foire
d'autan que group by foire complètement la chose
L'exemple ne fonctionnne pas
L'exemple ne fonctionnne pas sous Oracle !
limit
tout a fait
ca n'existe pas sous Oracle !
Post new comment