Altova MapForce 2023 Professional Edition

Les procédures stockées sont des programmes qui sont hébergés et exécutés sur un serveur de base de données. Les procédures stockées peuvent être appelées par les applications client et elles sont souvent rédigées dans un dialecte étendu de SQL. Certaines bases de données prennent aussi en charge des mises en place dans Java, .NET CLR, ou d'autres langages de programmation.

 

Les utilisations générales des procédures stockées incluent la requête d'une base de données et le renvoi de données à un client effectuant un appel, ou la réalisation de modifications au niveau de la base de données après la validation supplémentaire des paramètres d'entrée. Les procédures stockées peuvent aussi effectuer d'autres actions situées en-dehors de la base de données, per ex. envoyer des e-mails.

 

Une procédure stockée peut avoir zéro ou plusieurs paramètres d'entrée et de sortie, et peut retourner en option zéro ou plusieurs recordsets, en plus de la valeur retournée par défaut. Par conséquent, dans MapForce, vous pouvez appeler une procédure stockée de plusieurs manière :

 

Appeler une procédure stockée pour obtenir des données, comme s'il s'agissait d'un composant de source dans le mappage. Cela est applicable pour des procédures qui ne prennent pas de paramètres d'entrée. Lorsque le mappage est exécuté, la procédure est appelée, et elle retourne certains recordset ou paramètres de sortie. Vous pouvez mapper de recordset, ou les paramètres de sortie, ou les deux, à tout autre type de données pris en charge par MapForce. Pour voir un exemple, voir Procédures stockées en tant que source de données.

Appeler une procédure stockée en tant qu'appel semblable à une fonction, avec des paramètres. Dans ce cas, vous apportez tous les paramètres d'entrée requis depuis le mappage, et vous pouvez aussi mapper le recordset retourné, ou les paramètres de sortie, ou les deux, vers une autre cible prise en charge par MapForce. Pour voir un exemple, voir Procédures stockées avec Entrée et Sortie.

Appeler une procédure stockée comme s'il s'agissait d'un composant cible sur le mappage. Le cas d'utilisation typique est d'appeler une procédure stockée avec des paramètres afin de modifier la base de données (par exemple, insérer un enregistrement). Cette approche est convenable si vous ne nécessitez pas de sortie provenant de la procédure stockée. De même, dans cette approche, vous pouvez exécuter la procédure stockée dans le cadre d'une transaction de base de données qui peut être renversée en cas d'erreur. Pour voir un exemple, voir Procédures stockées dans les Composants cible.

 

Il existe des cas pour lesquels vous pouvez avoir besoin d'appeler des procédures stockées ou d'effectuer des actions dans les tables de base de données dans un ordre spécifique (d'abord insérer, puis mettre à jour, etc.). Par exemple, si vous souhaitez passer le paramètre de sortie d'une procédure stockée dans une autre procédure stockée. Ou bien vous pouvez souhaiter combiner des données retournées par une procédure stockée stored avec des données provenant d'une table. Ce genre d'actions est possible avec l'aide des relations locales définies dans MapForce, même si la base de données sous-jacente n'impose pas de relations clés primaire/étrangère entre les tables. Pour voir un exemple, voir Procédures stockées et Relations locales.

 

Note :Pour illustrer comment MapForce met en place des procédures de stockage, ce chapitre utilise Microsoft SQL Server 2016 et la base de données "AdventureWorks2016". Cette dernière peut être téléchargée depuis le https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks.

 

Notes de prise en charge

Les procédures stockées peuvent être utilisées uniquement dans le moteur d'exécution BUILT-IN. La génération de code en C++, C#, ou Java n'est pas prise en charge.

Les types définis par l'utilisateur, les types de curseur, les types de variante et de nombreux autres types de données "exotiques" spécifiques à des bases de données (comme des tableaux, géométrie, types CLR) sont généralement pas pris en charge en tant que types de paramètres d'entrée ou de sortie.

La surcharge de procédure et de fonction (plusieurs définitions de routines portant le même nom et des paramètres différents) n'est pas prise en charge.

Certaines valeurs par défaut de prise en charge de bases de données dans les paramètres d'entrée, cela n'est pas pris en charge actuellement. Vous ne pouvez pas omettre des paramètres d'entrée dans le mappage pour utiliser la valeur par défaut.

Les procédures stockées retournant des enregistrements multiples sont pris en charge selon la combinaison du pilote et de l'API de base de données (ODBC/ADO/ADO.NET/JDBC). Seules des procédures qui retournent le même nombre d'enregistrements avec une structure de colonne fixe sont prises en charge.

Dès que possible, utiliser la dernière version du pilote natif de base de données maintenu par le fournisseur de base de données. Éviter d'utiliser des pilote de pont, comme ODBC vers ADO Bridge, ou ODBC vers JDBC Bridge.

En option, vous pouvez activer des transactions de base de données pour les procédures stockées appelées en tant que source de données, voir Procédures stockées dans les Composants cibles. Les transactions ne sont pas prises en charge pour les procédures stockées appelées en tant que source de données (sans les paramètres d'entrée), ou celles qui sont appelées en tant qu'une fonction (avec l'entrée et la sortie).

 

La table suivante liste les notes de prises en charge spécifique à la base de données.

 

Base de données

Notes de prise en charge

Access

Les procédures stockées dans les bases de données Microsoft Access disposent de fonctions très limitées et ne sont pas prises en charge dans MapForce.

DB2

Pris en charge dans MapForce: procédures stockées, fonctions scalaires, fonctions table.

Les valeurs de retour provenant des procédures de stockage de DB2 ne sont pas prises en charge parce qu'elles ne peuvent pas être lues par le biais des API de base de données utilisées dans MapForce.

Les fonctions de ligne (RETURNS ROW) ne sont pas prises en charge.

Il est recommandé d'installer au moins "IBM_DB2 9.7 Fix Pack 3a" pour éviter un problème de pilote JDBC confirmé lors de la lecture des erreurs/avertissements après l'exécution. Cela permet aussi de régler un problème avec le fournisseur ADO qui entraîne la perte d'une ligne de résultat.

Firebird

Pris en charge dans MapForce: procédures stockées, fonctions table

Informix

Pris en charge dans MapForce: procédures stockées, fonctions table.

MariaDB

Pris en charge dans MapForce: procédures stockées, fonctions scalaires

MySQL

Pris en charge dans MapForce: procédures stockées, fonctions scalaires

MySQL contient une prise en charge complète pour des procédures stockées et des fonction en commençant avec la version 5.5. Si vous utilisez une version précédente, les fonctions dans MapForce sont limitées.

Oracle

Pris en charge dans MapForce: procédures stockées, fonctions scalaires, fonctions table. Cela contient des procédures stockées et des fonctions autonomes ainsi que celles définies dans un package Oracle.

Il est recommandé d'utiliser un pilote Oracle natif au lieu de Microsoft OLE DB Provider for Oracle.

Oracle a un moyen spécial de retourner les ensembles de résultat dans le client en utilisant des paramètres de sortie de type REF CURSOR. Cela est pris en charge par MapForce pour des for procédures stockées, mais pas pour des fonctions. Les noms et le nombre des enregistrements est donc toujours fixées pour des procédures stockées Oracle.

PostgreSQL

Pris en charge dans MapForce: fonctions scalaires, fonctions ligne, fonctions table.

Dans PostgreSQL, tous les paramètres de sortie définis dans une fonction décrit les colonnes de l'ensemble de résultat. Cette information est utilisée automatiquement par MapForce - aucune détection par exécution ou entrée des enregistrements n'est nécessaire. Les paramètres de type récurseur ne sont pas pris en charge.

Progress OpenEdge

Pris en charge dans MapForce: procédures stockées.

SQL Server

Pris en charge dans MapForce: procédures stockées, fonctions scalaires, fonctions table.

Il est recommandé d'utiliser le dernier pilote SQL Server Native Client au lieu de Microsoft OLE DB Provider for SQL Server.

L'API d'ADO a une prise en charge limitée pour certains types de données introduits avec SQL Server 2008 (datetime2, datetimeoffset). Si vous rencontrez des problèmes de raccourcissement de données avec ces types temporels lorsque vous utilisez ADO avec le SQL Server Native Client, vous pouvez définir l'argument de string de connexion DataTypeCompatibility=80 ou utiliser ODBC.

Les SQL Server Procedures ont un paramètre de retour implicite de type int null, qui est disponible pour le mappage. Si la procédure omet une instruction RETURN, la valeur résultante est 0.

SQLite

SQLite n'utilise pas de procédures stockées.

Teradata

Pris en charge dans MapForce: procédures stockées, macros.

Fonctions scalaires, fonctions d'agrégat et fonctions de table ne sont pas prises en charge

Problème connu : Le pilote Teradata ODBC refuse de remplir les valeurs de paramètre de sortie après un appel de procédure.

© 2017-2023 Altova GmbH