par Michael Sansoterra - Mis en ligne le 04/05/2005 - Publié en Juin 2004
Introduites dans la V5R2, les
UDTF (User-Defined Table Functions)
permettent aux programmeurs
SQL de définir et de stocker
des routines chargées de renvoyer
une table entière. De plus, les développeurs
peuvent utiliser ces fonctions
de table dans la clause FROM
d'une instruction SELECT comme
une table ou vue normale ...Dans
UDTF (User-Defined Table Functions)
: 1ère partie , (iSeries News
avril 2004), nous avons examiné
comment les UDTF SQL peuvent servir
de mécanisme d'extraction de
données de diverses tables dans la
base de données relationnelle. Mais
les UDTF présentent une seconde
dimension digne d'intérêt : l'UDTF
externe, capable d'accéder aux données
à l'extérieur de la base de données
relationnelle et de les renvoyer
comme une table qui est référencée
dans une requête SQL.
Rappelons qu'il existe deux catégories
d'UDTF : SQL et externes.
Comme on la vu dans la 1ère partie,
les UDTF SQL sont écrites en SPL
(SQL procedure language). Voici un
exemple de coding d'une UDTF SQL
simple
Create Function Sales(parmDate Date) Returns Table (OrderID Integer, CustomerID Integer, SalesAmt Dec(11,2) Language SQL Disallow Parallel Begin Return Select OrderID,CustomerID,SalesAmt From Orders Where OrderDate=parmDate; EndSQL extrait l'information de l'UDTF via l'instruction SELECT avec l'UDTF incluse dans le mot-clé TABLE, par exemple:
Select * From Table(Sales(Current)_Date)) As CurrentSalesN'oubliez pas de fournir un nom de corrélation (CurrentSales, par exemple) quand vous référencez une UDTF dans une requête.
Par comparaison avec les UDTF SQL, les programmeurs peuvent écrire des UDTF externes en langage évolué (HLL, high-level language) comme RPG, C ou COBOL. Généralement Les UDTF SQL utilisent une instruction SELECT pour extraire les données et conviennent donc parfaitement pour tirer des données de la base de données. Alors que l'UDTF externe peut aussi extraire des données de la base de données, l'UDTF SQL est généralement mieux adaptée à cette tâche. Cette règle souffre quelques exceptions : un nombre limité de situations où SQL est inefficace (par exemple, pour des auto-jointures récursives ou l'accès à des numéros d'enregistrements relatifs). Mais alors à quoi servent les UDTF externes ? Une réponse à cette question est qu'elles permettent à SQL d'avoir un accès en lecture à des sources de données non relationnelles (comme des données non stockées dans des tables de base de données) même si les données sont en réalité stockées dans une table. Tout type de données accessible à un programme HLL entre dans le cadre d'une UDTF externe. Voici quelques exemples de données qu'elles peuvent extraire :
- Contenu de fichier spoule
- Contenu de connexion socket
- Contenu d'espace utilisateur
- Contenu de fichier IFS
- Liste de fichiers spoules
- Liste de fichiers IFS
- Données renvoyées par une API système
C'est exactement ce que font les programmeurs d'UDTF externes : traiter des données non relationnelles comme si elles étaient dans une table. Le fait de coder les API de job dans une UDTF donnera à SQL l'accès à une « table virtuelle » contenant tous les jobs sur le système. Cette façon de faire présente deux avantages : elle permet aux programmeurs débutants de consulter l'information sur les jobs sans se soucier de la technique utilisée, et elle fait des compétences SQL de base la seule exigence pour une bonne utilisation d'UDTF. En mettant un habillage (« wrapper ») UDTF autour d'A