> Tech > Logique nécessaire

Logique nécessaire

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

Voyons maintenant la logique dont la procédure stockée SQL invoquante a besoin pour traiter les données du jeu de résultats contenues dans une table temporaire globale. Dans la figure 5, la procédure staff_project appelle la procédure Get_Free_Employees pour trouver les employés actuellement libres pour un nouveau projet.

La

Logique nécessaire

procédure staff-project sait que le résultat de cette interrogation se trouvera dans une table temporaire globale appelée freepmp_results. Pour traiter la liste renvoyée des employés dans la table temporaire, l’instruction For est utilisée pour ouvrir un curseur pour la table temporaire. A noter que le nom de la table temporaire globale doit être qualifié avec SESSION afin que DB2 puisse trouver la table temporaire globale déclarée renvoyée à partir de l’invocation de la procédure stockée Get_Free_Employees.

Si la procédure staff_project est appelée par deux connexions (ou jobs) de bases de données différentes simultanément, chaque connexion aura alors sa propre instance unique de cette table temporaire globale pour passer la liste des employés libres.

S’il existe certains programmes non SQL qui doivent accéder à ces données employé « libre » dans la table temporaire globale, des requêtes de lecture et d’écriture natives normales peuvent aussi être appliquées, parce qu’une table temporaire globale est considérée comme un objet table DB2 ordinaire.

Les déclencheurs SQL utilisaient le même langage procédural que le langage de procédure SQL. Ils souffrent donc de la même restriction : l’incapacité de traiter un jeu de résultats. Bien que les déclencheurs SQL puissent aussi utiliser cette technique de table temporaire globale, une étape de préparation supplémentaire est nécessaire. Quand un déclencheur SQL est créé, le standard SQL Server exige qu’existent tous les objets référencés par le déclencheur. De sorte que, si la table temporaire globale freemp_results n’existe pas dans le même job ou la même connexion qui tente de créer le déclencheur suivant, cette création échouera.

Pour contourner cet aspect d’imposition des standards, vous pourriez juste copier et exécuter l’instruction Declare Global Temporary Table pour la table globale requise à partir de la procédure stockée Get_Free_Employees ou appeler la procédure stockée avant d’exécuter cette instruction Create_Trigger (figure 6). Pour s’assurer que la dernière version de la définition de table temporaire globale sera utilisée, il vaudra mieux appeler la procédure avant de créer le déclencheur.

Téléchargez gratuitement cette ressource

IBMi et Cloud : Table ronde Digitale

IBMi et Cloud : Table ronde Digitale

Comment faire évoluer son patrimoine IBMi en le rendant Cloud compatible ? Comment capitaliser sur des bases saines pour un avenir serein ? Faites le point et partagez l'expertise Hardis Group et IBM aux côtés de Florence Devambez, DSI d'Albingia.

Tech - Par iTPro - Publié le 24 juin 2010