Partager via


Appeler des fonctions et des procédures avec DES CURSEURS REF dans Oracle Database à l’aide de BizTalk Server

Un CURSEUR REF est un type de données PL/SQL qui représente un pointeur vers un jeu de résultats côté serveur généré par l’exécution d’une requête. Un type REF CURSOR permet la diffusion en continu d’entrée et de sortie de données et est idéal pour transférer de grandes quantités de données vers et depuis un code PL/SQL. L’adaptateur Oracle Database prend en charge les CURSOR REF fortement typés et faiblement typés (SYS_REFCURSOR) qui peuvent être passés aux procédures PL/SQL et aux fonctions en tant que paramètres IN, OUT ou IN OUT. Pour plus d’informations sur la façon dont l’adaptateur Oracle Database prend en charge REF CURSOR, consultez Opérations sur les fonctions et procédures avec les paramètres REF CURSOR. Pour plus d’informations sur la structure XML pour REF CURSORS, consultez Schémas de message pour REF CURSORS.

Comment appeler des fonctions dans une base de données Oracle ?

L’exécution d’une opération sur une base de données Oracle à l’aide de l’adaptateur Oracle Database avec BizTalk Server implique des tâches procédurales décrites dans Blocs de construction pour développer des applications BizTalk avec Oracle Database. Pour appeler une fonction dans une base de données Oracle qui prend REF CURSOR comme paramètres dans et donne REF CURSOR en tant que paramètres de sortie, ces tâches sont les suivantes :

  1. Créez un projet BizTalk et générez le schéma pour la fonction que vous souhaitez appeler dans une base de données Oracle.

  2. Créez des messages dans le projet BizTalk pour envoyer et recevoir des messages à partir de la base de données Oracle.

  3. Créez une orchestration pour appeler la fonction dans la base de données Oracle.

  4. Générez et déployez le projet BizTalk.

  5. Configurez l’application BizTalk en créant des ports d’envoi et de réception physiques.

  6. Démarrez l’application BizTalk.

    Cette rubrique fournit des instructions pour effectuer ces tâches.

Exemple basé sur cette rubrique

Un exemple, Func_RefCursor, basé sur cette rubrique est également fourni avec le pack d’adaptateurs BizTalk. Pour plus d’informations, consultez Exemples d’adaptateurs.

Génération du schéma

Dans cette rubrique, pour montrer comment l’adaptateur Oracle Database prend en charge la fonction d’appel qui accepte les paramètres REF CURSOR, nous allons appeler la procédure GET_ACTIVITY. Cette procédure prend un CURSEUR IN REF faiblement typé et un CURSEUR IN OUT REF fortement typé comme paramètres. La fonction retourne un status, un CURSEUR REF OUT faiblement typé et un CURSEUR IN OUT REF fortement typé. La procédure GET_ACTIVITY est disponible dans le cadre de la ACCOUNT_PKG créée en exécutant les scripts SQL fournis avec les exemples. Pour en savoir plus sur les exemples et les scripts SQL, consultez Exemples de schémas.

Ainsi, pour appeler la procédure GET_ACTIVITY, nous générons le schéma pour la même procédure sous le schéma SCOTT\Package\ACCOUNT_PKG. Pour plus d’informations sur la génération d’un schéma, consultez Obtenir des métadonnées pour les opérations Oracle Database dans Visual Studio .

Définition des messages et des types de messages

Le schéma que vous avez généré précédemment décrit les « types » requis pour les messages dans l’orchestration. Un message est généralement une variable, dont le type est défini par le schéma correspondant. Vous devez lier le schéma que vous avez généré à la première étape aux messages de la fenêtre Vue d’orchestration du projet BizTalk.

Pour cette rubrique, vous devez créer deux messages : l’un pour envoyer une demande à la base de données Oracle et l’autre pour recevoir une réponse.

Effectuez les étapes suivantes pour créer des messages et les lier au schéma :

  1. Si la fenêtre Vue Orchestration du projet BizTalk n’est pas déjà ouverte, ouvrez-la. Pour ce faire, cliquez sur Affichage, pointez sur Autres fenêtres, puis cliquez sur Vue d’orchestration.

  2. Dans la vue Orchestration, cliquez avec le bouton droit sur Messages, puis cliquez sur Nouveau message.

  3. Cliquez avec le bouton droit sur le message nouvellement créé, puis sélectionnez Fenêtre Propriétés.

  4. Dans le volet Propriétés de Message_1, procédez comme suit :

    Propriété Pour
    Identificateur Demande de type.
    Type de message Dans la liste déroulante, développez Schémas, puis sélectionnez Func_RefCursor.OracleDBBindingSchema.GET_ACTIVITY, où Func_RefCursor est le nom de votre projet BizTalk. OracleDBBindingSchema est le schéma généré pour la procédure GET_ACTIVITY.
  5. Répétez l’étape précédente pour créer un message. Dans le volet Propriétés du nouveau message, procédez comme suit :

    Propriété Pour
    Identificateur Réponse de type.
    Type de message Func_RefCursor.OracleDBBindingSchema.GET_ACTIVITYResponse

Configuration de l’orchestration

Vous devez créer une orchestration BizTalk pour utiliser BizTalk Server pour appeler une procédure avec des paramètres REF CURSOR. Dans cette orchestration, vous supprimez un message de demande à un emplacement de réception défini. L’adaptateur Oracle Database consomme ce message et le transmet à la base de données Oracle via ODP. La réponse de la base de données Oracle est enregistrée à un autre emplacement. Une orchestration classique pour appeler des fonctions et des procédures avec REF CURSOR contient :

  • Envoyer et recevoir des formes pour envoyer des messages à la base de données Oracle et recevoir des réponses.

  • Port de réception unidirectionnel pour recevoir les messages de demande à envoyer à la base de données Oracle.

  • Port d’envoi bidirectionnel pour envoyer des messages de demande à la base de données Oracle et recevoir des réponses.

  • Port d’envoi unidirectionnel pour envoyer les réponses de la base de données Oracle à un dossier.

    Un exemple d’orchestration ressemble à ce qui suit :

    Orchestrations pour l’utilisation de curseurs ref dans Oracle

Ajout de formes de message

Veillez à spécifier les propriétés suivantes pour chacune des formes de message. Les noms répertoriés dans la colonne Forme sont les noms des formes de message affichées dans l’orchestration qui vient d’être mentionnée.

Forme Type de forme Propriétés
ReceiveMessage Recevoir - Définissez Nom sur ReceiveMessage
- Définissez Activer sur True
SendMessage Envoyer - Définissez Nom sur SendMessage
ReceiveResponse Recevoir - Définissez Nom sur ReceiveResponse
- Définissez Activer sur False
SendResponse Envoyer - Définissez Name sur SendResponse

Ajout de ports

Veillez à spécifier les propriétés suivantes pour chacun des ports logiques. Les noms répertoriés dans la colonne Port sont les noms des ports affichés dans l’orchestration.

Port Propriétés
FileIn - Définissez Identifier sur FileIn
- Définissez Type sur FileInType
- Définir le modèle de communication sur Unidirectionnel
- Définir le sens de la communication sur Réception
LOBPort - Définissez Identifier sur LOBPort
- Définissez Type sur LOBPortType
- Définir le modèle de communication sur Requête-réponse
- Définir le sens de la communication sur Envoyer-Recevoir
SaveResponse - Définissez Identifier sur SaveResponse
- Définissez Type sur SaveResponseType
- Définir le modèle de communication sur Unidirectionnel
- Définir le sens de la communication sur Envoyer

Spécifier des messages pour les formes d’action et les connecter aux ports

Le tableau suivant spécifie les propriétés et leurs valeurs que vous devez définir pour spécifier des messages pour les formes d’action et les lier aux ports. Les noms répertoriés dans la colonne Forme sont les noms des formes de message affichées dans l’orchestration mentionnée précédemment.

Forme Propriétés
ReceiveMessage - Définir message sur Demande
- Définissez Opération sur FileIn.REFCURSOR.Request
SendMessage - Définir message sur Demande
- Définissez Opération sur LOBPort.REFCURSOR.Request
ReceiveResponse - Définir Message sur Réponse
- Définissez Opération sur LOBPort.REFCURSOR.Response
SendResponse - Définir Message sur Réponse
- Définissez Opération sur SaveResponse.REFCURSOR.Request

Une fois que vous avez spécifié ces propriétés, les formes et les ports de message sont connectés et votre orchestration est terminée.

Vous devez maintenant générer la solution BizTalk et la déployer sur un BizTalk Server. Pour plus d’informations, consultez Génération et exécution d’orchestrations.

Configuration de l’application BizTalk

Une fois que vous avez déployé le projet BizTalk, l’orchestration que vous avez créée précédemment est répertoriée sous le volet Orchestrations de la console d’administration BizTalk Server. Vous devez utiliser la console d’administration BizTalk Server pour configurer l’application. Pour obtenir une procédure pas à pas, consultez Procédure pas à pas : déploiement d’une application BizTalk de base.

La configuration d’une application implique :

  • Sélection d’un hôte pour l’application.

  • Mappage des ports que vous avez créés dans votre orchestration à des ports physiques dans la console d’administration BizTalk Server. Pour cette orchestration, vous devez :

    • Définissez un emplacement sur le disque dur et un port de fichier correspondant où vous supprimerez un message de demande. L’orchestration BizTalk consomme le message de demande et l’envoie à la base de données Oracle.

    • Définissez un emplacement sur le disque dur et un port de fichier correspondant où l’orchestration BizTalk supprimera le message de réponse contenant la réponse de la base de données Oracle.

    • Définissez un port d’envoi WCF-OracleDB ou WCF-Custom physique pour envoyer des messages à la base de données Oracle. Vous devez également spécifier l’action dans le port d’envoi. Pour plus d’informations sur la création de ports WCF-Custom ou de WCF-OracleDB, consultez Configurer manuellement la liaison de port physique à l’adaptateur de base de données Oracle.

      Notes

      La génération du schéma à l’aide du complément de projet BizTalk du service d’adaptateur de consommation crée également un fichier de liaison contenant des informations sur les ports et les actions à définir pour ces ports. Vous pouvez importer ce fichier de liaison à partir de la console d’administration BizTalk Server pour créer des ports d’envoi (pour les appels sortants) ou des ports de réception (pour les appels entrants). Pour plus d’informations, consultez Configurer la liaison de port physique à l’aide d’un fichier de liaison de port vers Oracle Database.

Démarrage de l’application

Vous devez démarrer l’application BizTalk pour appeler une procédure dans une table de base de données Oracle. Pour obtenir des instructions sur le démarrage d’une application BizTalk, consultez Guide pratique pour démarrer une orchestration.

À ce stade, assurez-vous que :

  • Le port de réception FILE pour recevoir des messages de demande pour l’orchestration est en cours d’exécution.

  • Le port d’envoi FILE pour recevoir les messages de réponse de l’orchestration est en cours d’exécution.

  • Le port d’envoi WCF-Custom ou WCF-OracleDB pour envoyer des messages à la base de données Oracle est en cours d’exécution.

  • L’orchestration BizTalk pour l’opération est en cours d’exécution.

Exécution de l’opération

Après avoir exécuté l’application, vous devez supprimer un message de demande à l’emplacement de réception FILE. Le schéma du message de demande doit être conforme au schéma de la procédure que vous avez générée précédemment. Consultez Schémas de message pour les fonctions et procédures pour plus d’informations sur le schéma de message de demande pour appeler des fonctions à l’aide de l’adaptateur Oracle Database.

Pour appeler la procédure GET_ACTIVITY, vous devez spécifier un CURSEUR IN REF faiblement typé et un CURSEUR IN OUT REF fortement typé en tant que paramètres. Par conséquent, le message de demande d’appel de cette procédure est le suivant :

<GET_ACTIVITY xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG">  
  <INRECS>BEGIN OPEN ? FOR SELECT * FROM ACCOUNTACTIVITY WHERE ACCOUNT=100001; END;</INRECS>  
  <INOUTRECS_IN>BEGIN ACCOUNT_PKG.GET_ALL_ACTIVITY(?); END;</INOUTRECS_IN>  
</GET_ACTIVITY>  

L’orchestration consomme le message de requête et l’envoie à la base de données Oracle. La réponse de la base de données Oracle est enregistrée à l’autre emplacement FILE défini dans le cadre de l’orchestration.

La réponse au message de demande ci-dessus est la suivante :

<?xml version="1.0" encoding="utf-8" ?>   
<GET_ACTIVITYResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG">  
  <STATUS>5</STATUS>   
  <INOUTRECS>  
    <INOUTRECSRECORD xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACTIVITY">  
      <TID>1</TID>   
      <ACCOUNT>100001</ACCOUNT>   
      <AMOUNT>500</AMOUNT>   
      <DESCRIPTION />   
      <TRANSDATE>2007-10-16T16:58:44</TRANSDATE>   
      <PROCESSED>n</PROCESSED>   
    </INOUTRECSRECORD>  
    <INOUTRECSRECORD xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACTIVITY">  
      .....   
      .....   
    </INOUTRECSRECORD>  
    ....  
    ....  
  </INOUTRECS>  
  <OUTRECS>  
    <GenRecordRow xmlns="http://Microsoft.LobServices.OracleDB/2007/03">  
      <GenRecordColumn>  
        <GenRecordColumn>  
          <ColumnName>TID</ColumnName>   
          <ColumnValue>1</ColumnValue>   
          <ColumnType>System.Decimal</ColumnType>   
        </GenRecordColumn>  
        <GenRecordColumn>  
          ....   
        </GenRecordColumn>  
        .....  
        .....  
      </GenRecordColumn>  
    </GenRecordRow>  
    <GenRecordRow xmlns="http://Microsoft.LobServices.OracleDB/2007/03">  
      .....  
      .....  
    </GenRecordRow>  
    .....  
    .....  
  </OUTRECS>  
</GET_ACTIVITYResponse>  

Notez que la réponse contient un status, un CURSEUR REF OUT faiblement typé et un IN OUT REF CUROSR fortement typé.

Exceptions possibles

Pour plus d’informations sur les exceptions que vous pouvez rencontrer lors de l’appel de fonctions et de procédures à l’aide de BizTalk Server, consultez Exceptions et gestion des erreurs.

Bonnes pratiques

Une fois que vous avez déployé et configuré le projet BizTalk, vous pouvez exporter les paramètres de configuration vers un fichier XML appelé fichier de liaisons. Une fois que vous avez généré un fichier de liaisons, vous pouvez importer les paramètres de configuration à partir du fichier afin de ne pas avoir à créer les ports d’envoi, les ports de réception, etc. pour la même orchestration. Pour plus d’informations sur les fichiers de liaison, consultez Réutiliser les liaisons d’adaptateur de base de données Oracle.

Voir aussi

Développer des applications BizTalk