> Tech > Traitement des erreurs UDTF

Traitement des erreurs UDTF

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

Si le programme UDTF rencontre une erreur, il doit se fermer de manière ordonnée. L'UDTF indique au gestionnaire de base de données, via les paramètres de SQL State et de Message Text, qu'il a rencontré un problème. SQL State est CHAR(5) et les deux premiers caractères identifient les « classes

Traitement des erreurs UDTF

» listées ci-après :

    ’00’ — Success (Réussite)
    ’01’ — Warning (Avertissement)
    ’02’ — No Data (Pas de données)
    Other — Exceptions

Le manuel DB2 Universal Database
for iSeries SQL Messages and Codes recense
une multitude de classes d’exceptions.
Pour les besoins des procédures
stockées et fonctions externes, le
programme devrait retourner un SQL
State qui commence par ‘US’ pour signaler
l’occurrence d’une exception
définie par l’utilisateur. Les trois caractères
restants sont quelque peu arbitraires
pour les exceptions définies par
l’utilisateur. IFSDir transmet ‘US001’
comme code d’erreur pour toutes les
conditions d’erreur et remplit la paramètre
Message Text avec un texte décrivant
le problème.
IFSDir traite une poignée de situations
d’erreur, en commençant par l’appel
adressé à  OpenDir. Si le dossier demandé
n’existe pas, IFSDir signale une
exception. Il est important de noter que
si cette exception est signalée pendant
l’appel « open », le gestionnaire de base
de données n’appellera pas l’UDTF à 
nouveau avec un type d’appel « close ». Par conséquent, la
défaillance d’un open doit inclure tout travail de nettoyage
éventuel. Si IFSDir signale une erreur pendant l’appel
« fetch », le gestionnaire de base de données émettra encore
un appel « close ».
IFSDir vérifie les autres situations d’erreur pendant l’appel
« fetch » et dans la sous-routine *PSSR. Si une erreur survient,
les paramètres SQL State et Message Text sont définis
en conséquence. (Si le RPG ne vous est pas familier, la sousroutine
*PSSR est une routine spéciale appelée quand le programme
rencontre une erreur d’exécution. Elle est similaire
à  un message global monitor dans CL.)
De plus, les UDTF ne disposent que d’un temps limité
(30 secondes par défaut) pour s’exécuter avant que le
gestionnaire de base de données n’arrête l’exécution de
l’instruction.
Utiliser l’UDTF IFSDir
En supposant que nous ayons maintenant codé correctement
l’UDTF, que pouvons-nous en faire ? En autres choses,
nous pouvons inventorier les fichiers qui se trouvent dans
notre IFS :

Select Count(*) As No_Files,
Sum(AllocSize) As SpaceUsed
From Table(IFSDIR('/webdev/audiofiles')) As Dir

En sautant par dessus le plus simple, nous pouvons aussi
l’utiliser pour participer à  la mise à  jour des enregistrements
dans une table réelle. La figure 6 montre une procédure
stockée qui utilise la fonction IFSDir pour mettre à  jour des drapeaux dans la table Material en se basant sur la présence,
ou non, dans l’IFS de fichiers multimédia pour le MaterialNo
par exemple. (Dans la pratique, il faudrait bien sûr ajouter le
traitement des erreurs à  la procédure réelle.)
Comme pour d’autres idées, il n’y a pas de limite à  ce qui
peut être fait avec des UDTF externes. Si vous voulez une requête
rapide pour trouver les jobs ODBC sur le système et
qui les utilise, que pensez-vous de ceci ? :

Select *
From Table(ActiveJobs('QSYSWRK')) As Jobs
Where JobName='QZDASOINIT'

Vous pouvez écrire une UDTF pour faire cela en utilisant les
API de job mentionnées ci-dessus. Par exemple, supposons
que vous vouliez accéder en temps réel à  une table HTML
particulière sur une page Internet donnée :

Select *
From Table(WebPage('www.mysite.com','HTMLTable'))
As WebData

Vous pouvez écrire cette UDTF en utilisant la programmation
d’API Sockets pour vous connecter dynamiquement
à  un serveur Web et extraire le contenu de la page Web.

Téléchargez gratuitement cette ressource

Aborder la Blockchain, comprendre et démarrer

Aborder la Blockchain, comprendre et démarrer

Une véritable révolution se prépare progressivement... les entreprises doivent veiller à ne pas rester à l’écart et se faire prendre de vitesse. Tout comme la mobilité ou encore le cloud, la blockchain est une composante essentielle de la transformation numérique. Découvrez, dans ce dossier, comment aborder, comprendre et démarrer la Blockchain

Tech - Par iTPro - Publié le 24 juin 2010