Développement d'application : Programmation des applications serveur

Procédures d'exécution de langage commun (CLR) à ensembles de résultats multiples

Le nombre maximal d'ensembles de résultats pouvant être renvoyé par une procédure d'exécution de langage commun (CLR) est limité. La limite est déterminée par le nombre maximal d'objets DB2DataReader que le fournisseur de données DB2 .NET peut prendre en charge simultanément après ouverture dans une connexion. La prise en charge d'un programme de lecture de données actives concurrentes permet l'ouverture de plusieurs objets DB2DataReader dans une connexion. C'est pourquoi, une procédure CLR peut renvoyer plusieurs ensembles de résultats.

Modes de contrôle d'exécution de routine CLR (clause EXECUTION CONTROL)

En tant qu'administrateur de base de données ou développeur d'applications, vous pouvez protéger les assemblages associés à vos routines externes DB2 Universal Database contre une contrefaçon en limitant les actions des routines au moment de l'exécution. Les routines CLR DB2 .NET prennent en charge la spécification d'un mode de contrôle d'exécution permettant d'identifier les types d'action qu'une routine peut réaliser lors de l'exécution. Lors de l'exécution, DB2 UDB peut détecter si la routine tente de réaliser des actions qui sortent du cadre du mode de contrôle d'exécution spécifié, ce qui peut être utile pour déterminer si un assemblage a été compromis.

Pour définir le mode de contrôle d'exécution d'une routine CLR, indiquez la clause EXECUTION CONTROL facultative dans l'instruction CREATE pour la routine. Les modes valides sont les suivants :

Pour modifier le mode de contrôle d'exécution d'une routine CLR existante, exécutez l'instruction ALTER PROCEDURE ou ALTER FUNCTION.

Si la clause EXECUTION CONTROL n'est pas spécifiée pour une routine CLR, cette routine CLR s'exécute par défaut en utilisant le mode de contrôle d'exécution le plus restrictif SAFE. Les routines créées avec ce mode de contrôle d'exécution peuvent uniquement accéder aux ressources contrôlées par le gestionnaire de base de données. Les modes de contrôle d'exécution les moins restrictifs permettent à une routine d'accéder aux fichiers sur le système de fichiers (FILEREAD ou FILEWRITE) ou sur le réseau. Le mode de contrôle d'exécution UNSAFE permet de préciser que le comportement de la routine ne doit en aucun cas être restreint. Les routines définies avec le mode de contrôle d'exécution UNSAFE peuvent exécuter du code binaire.

Ces modes de contrôle représente une hiérarchie d'actions admissibles, et un mode de niveau supérieur inclut les actions admises aux niveaux qui lui sont inférieurs dans la hiérarchie. Par exemple, le mode de contrôle d'exécution NETWORK permet à une routine d'accéder aux fichiers sur le réseau, aux fichiers sur le système de fichiers local et aux ressources contrôlées par le gestionnaire de base de données. Utilisez le mode de contrôle d'exécution le plus restrictif possible et éviter d'utiliser le mode UNSAFE.

Si, lors de l'exécution, DB2 UDB détecte qu'une routine CLR tente une action qui sort du cadre de son mode de contrôle d'exécution, DB2 UDB renvoie une erreur (SQLSTATE 38501).

La clause EXECUTION CONTROL peut uniquement être spécifiée pour les routines CLR LANGUAGE. La portée d'applicabilité de la clause EXECUTION CONTROL est limitée à la routine .NET CLR elle-même et ne s'étend pas à d'autres routines qu'elle est susceptible d'appeler.

Précision décimale maximale et échelle des routines CLR

Le type de données DECIMAL de DB2 Universal Database (UDB) est représenté avec une précision de 31 chiffres et une échelle de 28 chiffres. Le type de données .NET CLR System.Decimal est limité à une précision de 29 chiffres et à une échelle de 28 chiffres. Par conséquent, les routines CLR externes de DB2 UDB ne doivent pas attribuer une valeur supérieure à (2^96)-1, valeur maximum pouvant être représentée avec une précision à 29 chiffres et une échelle à 28 chiffres, à une variable de type de données System.Decimal. Si cette instruction n'est pas respectée, DB2 UDB émet une erreur d'exécution (SQLSTATE 22003, SQLCODE -413).

Lors de l'exécution de l'instruction CREATE d'une routine, si une échelle supérieure à 28 a été attribuée au paramètre de type de données DECIMAL, DB2 UDB émet une erreur (SQLSTATE 42611, SQLCODE -604).

[ Début de page |Page précédente | Page suivante | Table des matières ]