2010-09-20 19 views
1

Je suis en train de faire ce qui suit:Paramertize Fetch Première n lignes seulement dans DB2

select * 
    from table  
    fetch first @param rows only 

@param est un entier.

DB2 ne l'aurait pas. J'ai entendu parler de la concaténation avec ||, mais je n'arrive pas à le faire fonctionner.

Quelqu'un a-t-il de l'expérience?

(PS J'ai vu un similar question) mais je n'ai pas compris son approche en utilisant ': 1'.

+0

Est-ce une procédure stockée? Exécutez-vous cela d'un client? Si oui, à quoi correspond le code client, et y avez-vous accès? –

+0

@AJ C'est une procédure stockée, et j'y ai accès. Peut appeler le sp, ne peut tout simplement pas compiler en passant dans paramter pour aller chercher n premières lignes seulement. – mint

+0

Qu'est-ce qui ne va pas compiler? – WarrenT

Répondre

3

Vous pouvez essayer ce qui suit:

select t.* 
from (select r.*, row_number() over() as row_num 
     from table r) as t 
where row_num <= @param 
+0

Je peux essayer cela ... Je pense juste qu'il devrait y avoir un moyen de passer un paramètre à la requête ci-dessus! – mint

+0

Je pense (pas 100% sur ce point) la raison pour laquelle vous ne pouvez pas avec ce qui précède est la syntaxe fetch first x rows only est plus d'une instruction d'optimisation que dire une fonctionnalité de syntaxe pour la pagination. Il demande à DB2 de ne pas effectuer les lectures de prélecture agressives habituelles, ce qui permet d'économiser l'accès au disque. –

+0

Cela peut être extrêmement inefficace avec des tables volumineuses, car vous attribuez un numéro de ligne à chaque ligne, puis choisissez celles qui ont un nombre faible. – WarrenT

1

Essayez ce, où V_NBR est votre passé en paramètre pour le nombre de lignes que vous souhaitez:

FETCH FIRST ' || DIGITS (V_NBR) || ' ROWS ONLY '