> Tech > Conseil 2 : Utiliser des vues pour atteindre des lignes dans une structure hôte

Conseil 2 : Utiliser des vues pour atteindre des lignes dans une structure hôte

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

SQL/400 a une fonction propriétaire qui permet de spécifier une structure hôte (une structure de données RPG, un élément de groupe Cobol, par exemple), plutôt qu'une liste de variables d'hôte individuelles, sur une instruction Fetch imbriquée dans un programme HLL. Les valeurs des colonnes extraites sont placées dans les sous-champs

Conseil 2 : Utiliser des vues pour atteindre des lignes dans une structure hôte

de la structure,
en respectant l’ordre dans lequel les sous-champs sont déclarés.
Non standard, cette fonction simplifie néanmoins le
coding. Une fonction connexe, tableaux de structure hôte,
peut aussi améliorer nettement la performance en permettant
d’extraire plusieurs lignes lors de chaque opération
Fetch.
Le moyen le plus simple et le plus sûr de déclarer une
structure hôte consiste à  référencer une table ou une vue
comme un fichier externe. On pourra ensuite utiliser « Select
* … » sur la déclaration du curseur associée qui fait référence
à  la même table ou vue. En utilisant ces techniques ensemble,
on a la certitude que chaque fois que le programme
est compilé, la structure hôte et les colonnes du curseur correspondent
parfaitement.
Toutefois, quand on ne veut qu’un petit nombre de
colonnes d’une table, cette méthode doit être affinée. Une
solution simple consiste à  créer une vue qui ne liste que les
colonnes nécessaires. Puis à  référencer cette vue dans le curseur
et (comme un fichier externe) dans la déclaration de
structure hôte. Comme une vue SQL ne conduit jamais DB2
à  créer un chemin d’accès à  clé, on ne subira pas un volume
de mise à  jour excessif du fait qu’il y a trop de vues sur une
table.
L’instruction suivante crée une vue que l’on peut utiliser
pour une extraction équivalente de celle du Conseil 1 :

Create View CustIdName As
Select CustId, CustName
From Customer


L’instruction suivante crée une structure de données ILE
RPG qui servira de structure hôte pour extraire des données
au travers de cette vue :


D CustNameR E DS
ExtName( CustName


La déclaration du curseur associée serait alors

Declare Cursor CustNameCsr
Cursor For
Select *
From CustIdName
Order By CustName

Et l’instruction Fetch serait

Fetch Next
From CustNameCsr
Into:CustNameR

Sachez qu’il faudra inclure les colonnes utilisées dans la
clause Where d’un curseur dans la définition de vue ou utiliser
une clause Where qui fait référence à  la table sous-jacente,
comme dans cet exemple qui ne sélectionne que les
clients d’une certaine ville :

Declare Cursor CustCityCsr
Cursor For
Select *
From CustIdName As CN
Where CN.CustId
In ( Select C.CustId
From Customer As C
Where C.CustCity =
:InpCustCity )
Order By CustName

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