> Tech > UDTF SQL, deuxième partie

UDTF SQL, deuxième partie

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

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;
End
SQL 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 CurrentSales
N'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
Mais quel est l'intérêt de mettre ces ressources à  disposition de SQL ? Réponse : Parce que SQL est simple à  utiliser, ce qui n'est pas toujours le cas de la programmation nécessaire pour collecter cette information. Prenons comme exemple un problème classique de gestion des jobs : le besoin de vérifier si un certain job est en activité avant d'en lancer un autre (ou de relancer le même). On pourrait bien sûr créer un programme utilitaire chargé de travailler avec les API QUSLJOB (List Job) et QUSRJOBI (Retrieve Job Information), mais ce ne serait pas facile. En revanche, ce serait un jeu d'enfant pour SQL. Seule condition : qu'une table contenant la toute dernière information sur les jobs existe sur le système. Une rapide requête consulterait la table pour voir si un job est actif.
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

Les UDTF externes sont un peu
longues à  expliquer et donc nous nous contenterons d’un
exemple d’obtention de données non relationnelles : extraire
une liste de fichiers d’un dossier sur l’IFS. Le code de cet
exemple de programme RPG, qui peut être téléchargé à  partir
de www.itpro.fr Club abonnés contient une UDTF appelée
IFSDir. Vous pouvez l’invoquer de la manière suivant :

Select * From Table(IFSDir('/home/mike')) As Dir

La figure 1 montre à  quoi ressemblera le résultat de cette
fonction.

Téléchargez gratuitement cette ressource

Endpoint Security : Etude IDC Enjeux & Perspectives

Endpoint Security : Etude IDC Enjeux & Perspectives

Quel est l'état de l'art des solutions de Endpoint Security et les perspectives associées à leur utilisation ? Comment garantir la sécurité des environnements sensibles en bloquant au plus tôt les cyber attaques sophistiquées, avant qu’elles n'impactent durablement vos environnements de travail ?

Tech - Par iTPro.fr - Publié le 24 juin 2010