2009-06-22 7 views
1

Je me demande si quelqu'un a une solution à la condition suivante. J'ai une procédure stockée qui renvoie un ensemble de résultats de par exemple 1000 lignes. Maintenant, je dois limiter cela à 100 lignes à la fois. Je vais donc passer un début et de la valeur d'index fin et je ne veux que les enregistrements entre l'index de départ rowcount et l'indice final rowcountSybase IQ Pagination

Ainsi, par exemple ma signature d'appel de procédure stockée ressemble à ceci: -

stp_mystoredproc(startIndex INTEGER, endIndex INTEGER) 

donc, si je mis startIndex = 100 et endIndex = 200 alors je veux la procédure stockée pour renvoyer les enregistrements dans les lignes 100 à 200 de la remise à zéro totale ensemble de 1000.

Ma première tentative est de mettre le jeu de résultats dans une table temporaire avec un colonne d'identité puis sélectionnez en fonction de l'identité de la gamme dont j'ai besoin, mais c'est un peu lent. Je sais qu'Oracle prend en charge la pagination afin que vous puissiez parcourir votre ensemble de résultats. Quelqu'un sait si Sybase IQ (v12.6 ou v12.7) supporte quelque chose de similaire?

L'objectif final est de faire défiler l'intégralité du jeu de résultats (1000 enregistrements), mais dans des pages de 100 lignes à la fois.

+0

Après un peu de recherche, je trouve Sybase IQ a deux caractéristiques qui aident à la pagination. La fonction NUMBER (*) vous donne un nombre d'enregistrements en cours d'exécution dans le jeu de résultats et ROWID fournit l'identifiant de ligne de la table. –

Répondre

0

Je ne connais pas sybase. Mais peut-être que vous pourriez faire quelque chose comme ça

myproc(@count int, @lastid int) 

select top @count * 
from MyTabel 
where id > @lastid 
order by id 

premier appel

exec myproc(100, 0) 

vous donne quelque chose comme

3 appels 
4 banana 
.. 
.. 
.. 
346 potatto 

prochain appel

exec myproc myproc(100,346)

+0

Merci, c'est en fait une bonne idée et devrait fonctionner très bien. Je vais essayer. –

0

Sybase IQ et Sybase SQL Anywhere partagent le même moteur d'exécution de requêtes et la même syntaxe SQL, ce qui vous permet généralement d'utiliser la syntaxe SQL Anywhere. Essayez ceci:

select top (endIndex-startIndex) start at startIndex from <query> 

Je ne sais pas si vous pouvez utiliser une expression dans la clause top, vous devrez peut-être créer une chaîne et utiliser execute immediate.

Voir http://dcx.sybase.com/index.html#1201/en/dbreference/select-statement.html

+0

Merci pour cela, je l'ai essayé sur Sybase IQ v12.7 mais il ne semble pas être pris en charge. Je vais essayer à nouveau sous la v15 dans quelques semaines et voir si cela fonctionne. –