> Tech > Une expression très puissante

Une expression très puissante

Tech - Par iTPro - Publié le 24 juin 2010
email

On l’a vu, l’expression Row_Numberpermet d’attribuer un identificateur. Mais elle peut aussi servir pour traiter simplement  un sous-ensemble ou un jeu de résultats. Dans l’exemple de la figure 8, l’expression Row_Number est associée à une expression

de table courante(CTE, common table expression) (c’est-à-dire, la clause WITH ) pour renvoyer (en figure 9) uniquement un sous Ensemble des employés provenant de l’exemple précédent.

Si vous rencontrez une CTE (common table expression) pour la première fois, considérez qu’il s’agit de créer une vue SQL temporaire qui ne sera utilisée que par l’instruction SELECT associée. L’expression numbering table attribue un identificateur à chaque employé, puis l’instruction SELECT spécifie la suite ou l’ensemble des employés à retourner. Les valeurs constantes de cette instruction, 6 et 10, pourraient bien sûr être remplacées par des marqueurs de paramètres ou des variables d’hôtes, afin que l’application puisse utiliser cette instruction pour feuilleter ou saisir un sous-ensemble différent de résultats en utilisant la même requête. Peut-être pensez-vous que cette instruction est exagérément complexe avec les CTE numbering, et que l’expression de table pourrait être abandonnée de manière à produire une version plus dépouillée : SELECT ROW_NUMBER() OVER (ORDER BY workdept, lastname) AS rowno, lastname, salary, workdept FROM emp WHERE rowno BETWEEN 6 AND 10 ORDER BY workdept, lastname

Malheureusement, cela n’est pas permis par le standard SQL parce que la clause WHERE est traitée avant les expressions de la liste SELECT. Par conséquent, la référence rowno (numéro de ligne) sur la clause WHERE sera marquée comme une clause indéfinie parce que l’analyseur syntaxique (parser) DB2 SQL n’a pas traité l’expression rowno définie sur la liste SELECT.

Dans la figure 8, une CTE (c’est-àdire la clause WITH ) est utilisée pour définir rowno avant l’instruction SELECT principale. On voit donc que les CTE sont très utiles quand on veut réutiliser des calculs ou des expressions complexes sur des clauses différentes d’une même instruction SQL. Autre possibilité : incorporer le Row_Number dans une vue SQL, mais au prix de deux instructions SQL séparées.

 

 

Téléchargez gratuitement cette ressource

Comment sécuriser la Digital Workplace ?

Comment sécuriser la Digital Workplace ?

Avec le recours généralisé au télétravail, les entreprises ont ouvert davantage leur SI. En dépit des précautions prises, elles ont mécaniquement élargi leur surface d’exposition aux risques. Découvrez 5 axes à ne pas négliger dans ce Top 5 Sécurité du Télétravail.

Tech - Par iTPro - Publié le 24 juin 2010