Partager via


Insérer, mettre à jour, supprimer ou sélectionner des opérations dans Oracle Database à l’aide du modèle de service WCF

L’adaptateur Microsoft BizTalk pour Oracle Database expose un ensemble d’opérations d’insertion, de mise à jour, de suppression et de sélection de base de données sur des tables et des vues de base de données Oracle. À l’aide de ces opérations, vous pouvez effectuer des instructions SQL INSERT, UPDATE, SELECT et DELETE simples qualifiées par une clause WHERE sur une table ou une vue cible. Pour effectuer des opérations plus complexes, par exemple une requête SQL SELECT qui utilise l’opérateur JOIN, vous pouvez utiliser l’opération SQLEXECUTE. Pour plus d’informations sur l’opération SQLEXECUTE, consultez Exécution d’une opération SQLEXECUTE dans oracle Database à l’aide du modèle de service WCF.

Le tableau suivant récapitule les opérations SQL de base que l’adaptateur Oracle Database expose sur les tables et les vues. Pour obtenir une description complète de ces opérations, consultez Schémas de message pour les opérations d’insertion, de mise à jour, de suppression et de sélection de base sur les tables et les vues.

Opération Description
Insérer L’opération Insert prend en charge plusieurs insertions d’enregistrements ou d’insertions en bloc dans la table ou la vue cible :

- Une opération d’insertion d’enregistrements multiples insère des lignes dans une table ou une vue en fonction d’un jeu d’enregistrements fourni.
- Une opération d’insertion en bloc insère des lignes dans une table ou une vue en fonction d’une requête SQL SELECT et d’une liste de colonnes fournies. Les enregistrements retournés par la requête sont insérés dans la table cible en fonction de la liste de colonnes.
Sélectionnez Exécute une requête SQL SELECT sur la table cible en fonction d’une liste fournie de noms de colonnes et d’une chaîne de filtre qui spécifie une clause SQL WHERE.
Update Effectue une mise à jour sur la table cible. Les enregistrements à mettre à jour sont spécifiés par une chaîne de filtre qui spécifie une clause SQL WHERE. Les valeurs de la mise à jour sont spécifiées dans un enregistrement de modèle.
Supprimer Effectue une opération DELETE sur la table cible en fonction d’une clause SQL WHERE spécifiée dans une chaîne de filtre.

À propos des exemples utilisés dans cette rubrique

Les exemples de cette rubrique utilisent la table /SCOTT/ACCOUNTACTIVITY. Un script pour générer cette table est fourni avec les exemples sdk. Pour plus d’informations sur les exemples de KIT de développement logiciel (SDK), consultez Exemples dans le Kit de développement logiciel (SDK).

Classe de client WCF

Le nom du client WCF généré pour les opérations SQL de base de données exposées par l’adaptateur Oracle Database est basé sur le nom de la table ou de la vue, comme dans le tableau suivant.

Artefact de base de données Oracle Nom du client WCF
Table de charge de travail [SCHEMA] Table[TABLE_NAME]Client
Affichage [SCHEMA] View[VIEW_NAME]Client

[SCHEMA] = Collection d’artefacts Oracle ; par exemple, SCOTT.

[TABLE_NAME] = Nom de la table ; par exemple, ACCOUNTACTIVITY.

[VIEW_NAME] = Nom de la vue.

Le tableau suivant montre les signatures de méthode pour les opérations SQL de base sur une table. Les signatures sont les mêmes pour une vue, sauf que l’espace de noms et le nom de la vue remplacent ceux de la table.

Opération Signature de méthode
Insérer long Insert([TABLE_NS].[ TABLE_NAME]RECORDINSERT[] RECORDSET, string COLUMN_NAMES, string QUERY) ;
Sélectionnez [TABLE_NS]. [TABLE_NAME] RECORDSELECT[] Select(string COLUMN_NAMES, string FILTER) ;
Update long Update([TABLE_NS].[ TABLE_NAME]RECORDUPDATE RECORDSET, string FILTER) ;
Supprimer Long Delete(string FILTER) ;

[TABLE_NS] = Nom de l’espace de noms de table ; par exemple, microsoft.lobservices.oracledb._2007._03.SCOTT. Table.ACCOUNTACTIVITY.

[TABLE_NAME] = Nom de la table ; par exemple, ACCOUNTACTIVITY.

Les types d’enregistrements utilisés par les opérations Insert, Update et Select sont tous définis dans l’espace de noms de table ou de vue.

Le code suivant montre les signatures de méthode pour une classe de client WCF générées pour les opérations Delete, Insert, Select et Update sur la table /SCOTT/ACCOUNTACTIVITY.

public partial class SCOTTTableACCOUNTACTIVITYClient : System.ServiceModel.ClientBase<SCOTTTableACCOUNTACTIVITY>, SCOTTTableACCOUNTACTIVITY {  
  
    public long Delete(string FILTER);  
  
    public long Insert(microsoft.lobservices.oracledb._2007._03.SCOTT.Table.ACCOUNTACTIVITY.ACCOUNTACTIVITYRECORDINSERT[] RECORDSET, string COLUMN_NAMES, string QUERY);  
  
    public microsoft.lobservices.oracledb._2007._03.SCOTT.Table.ACCOUNTACTIVITY.ACCOUNTACTIVITYRECORDSELECT[] Select(string COLUMN_NAMES, string FILTER);  
  
    public long Update(microsoft.lobservices.oracledb._2007._03.SCOTT.Table.ACCOUNTACTIVITY.ACCOUNTACTIVITYRECORDUPDATE RECORDSET, string FILTER);  
}  

Appel des opérations SQL de base

Pour appeler les opérations SQL de base sur une table ou une vue à l’aide d’un client WCF, procédez comme suit.

  1. Générez une classe de client WCF pour la table ou la vue cible. Cette classe doit contenir des méthodes pour les opérations que vous allez appeler sur l’artefact cible.

  2. Créez un instance de la classe de client WCF et appelez ses méthodes pour effectuer des opérations sur la table ou la vue.

    Pour plus d’informations sur la création d’une classe cliente WCF et l’appel d’opérations sur l’adaptateur Oracle Database, consultez Vue d’ensemble du modèle de service WCF avec l’adaptateur de base de données Oracle.

    L’adaptateur Oracle Database exécute chaque opération à l’intérieur d’une transaction sur la base de données Oracle. Vous pouvez contrôler le niveau d’isolation de cette transaction en définissant la propriété de liaison TransactionIsolationLevel . Pour plus d’informations sur les propriétés de liaison de l’adaptateur Oracle Database, consultez Utilisation de l’adaptateur BizTalk pour les propriétés de liaison de base de données Oracle.

    Les sections suivantes fournissent des détails sur l’appel de chaque opération SQL de base dans votre code.

Opération d'insertion

Le tableau suivant montre comment définir des paramètres pour plusieurs opérations d’insertion d’enregistrement et d’insertion en bloc.

Type d’opération d’insertion RECORDSET COLUMN_NAMES QUERY
Enregistrement multiple Collection d’INSERTRECORDS qui doit être insérée dans la cible. null null
Bloc null Liste délimitée par des virgules de noms de colonnes dans la cible ; par exemple, « TID, ACCOUNT ». La liste de colonnes spécifie les colonnes dans lesquelles les résultats de la requête doivent être placés dans chaque ligne insérée. La requête doit retourner un jeu de résultats qui correspond aux colonnes spécifiées dans la liste de colonnes en nombre et en type. Une requête SQL SELECT sur une table ou une vue de base de données qui retourne un jeu de résultats à insérer dans la cible ; par exemple, « SELECT (TID, ACCOUNT) FROM NEW_TRANSACTIONS WHERE ACCOUNT = 100001 ». Le jeu de résultats doit correspondre à la liste de colonnes en nombre et en type.

L’opération Insert retourne le nombre d’enregistrements insérés dans la cible.

Important

Dans le modèle de service WCF, le jeu d’enregistrements utilisé dans l’opération Insertion est fortement typé. Vous pouvez définir la valeur d’une colonne nillable sur null dans un enregistrement pour exclure cette colonne de l’opération Insert ; Toutefois, vous ne pouvez pas définir la valeur d’une colonne non nillable sur null. Cela signifie que dans une opération d’insertion de plusieurs enregistrements, vous devez fournir des valeurs pour toutes les colonnes non nillables dans chaque enregistrement. En outre, il n’existe aucune prise en charge de la diffusion en continu pour les opérations SQL de base lorsque vous utilisez le modèle de service WCF. Si votre opération d’insertion d’enregistrements multiples implique un jeu d’enregistrements volumineux, il peut s’agir d’une considération importante. Pour plus d’informations, consultez Limitations de l’appel des opérations SQL de base à l’aide du modèle de service WCF.

Le code suivant montre une opération d’insertion de plusieurs enregistrements (deux enregistrements) qui cible la table ACCOUNTACTIVITY.

// Insert records  
                using (SCOTTTableACCOUNTACTIVITYClient aaTableClient =   
                    new SCOTTTableACCOUNTACTIVITYClient("OracleDBBinding_SCOTT.Table.ACCOUNTACTIVITY"))  
                {  
                    long recsInserted;  
  
                    aaTableClient.ClientCredentials.UserName.UserName = "SCOTT";  
                    aaTableClient.ClientCredentials.UserName.Password = "TIGER";  
  
                    try  
                    {  
                        aaTableClient.Open();  
                    }  
                    catch (Exception ex)  
                    {  
                        // handle exception  
                        Console.WriteLine("Exception: " + ex.Message);  
                        throw;  
                    }  
  
                    // Do a multiple record Insert of 2 records for account 100001  
  
                    microsoft.lobservices.oracledb._2007._03.SCOTT.Table.ACCOUNTACTIVITY.ACCOUNTACTIVITYRECORDINSERT[] insertRecs =  
                        new microsoft.lobservices.oracledb._2007._03.SCOTT.Table.ACCOUNTACTIVITY.ACCOUNTACTIVITYRECORDINSERT[2];  
  
                                  TID__COMPLEX_TYPE tid = new TID__COMPLEX_TYPE();  
                                  tid.InlineValue = "tidSequence.NextVal()";  
  
                                  ACCOUNT__COMPLEX_TYPE account = new ACCOUNT__COMPLEX_TYPE();  
                                  account.Value = 100001;  
  
                    AMOUNT__COMPLEX_TYPE amount = new AMOUNT__COMPLEX_TYPE();  
                    amount.Value = 400;  
  
                    TRANSDATE__COMPLEX_TYPE transdate = new TRANSDATE__COMPLEX_TYPE();  
                    transdate.Value = DateTime.Now.Date;  
  
                    PROCESSED__COMPLEX_TYPE processed = new PROCESSED__COMPLEX_TYPE();  
                    processed.Value = "n";  
  
                    DESCRIPTION__COMPLEX_TYPE description1 = new DESCRIPTION__COMPLEX_TYPE();  
                    description1.Value = "Inserted Record #1";  
  
                    DESCRIPTION__COMPLEX_TYPE description2 = new DESCRIPTION__COMPLEX_TYPE();  
                    description2.Value = "Inserted Record #2";  
  
                    insertRecs[0] =   
                        new microsoft.lobservices.oracledb._2007._03.SCOTT.Table.ACCOUNTACTIVITY.ACCOUNTACTIVITYRECORDINSERT();  
                    insertRecs[0].TID = tid;  
                    insertRecs[0].ACCOUNT = account;  
                    insertRecs[0].AMOUNT = amount;  
                    insertRecs[0].TRANSDATE = transdate;  
                    insertRecs[0].DESCRIPTION = description1;  
                    insertRecs[0].PROCESSED = processed;  
  
                    insertRecs[1] =   
                        new microsoft.lobservices.oracledb._2007._03.SCOTT.Table.ACCOUNTACTIVITY.ACCOUNTACTIVITYRECORDINSERT();  
                    insertRecs[1].TID = tid;  
                    insertRecs[1].ACCOUNT = account;  
                    insertRecs[1].AMOUNT = amount;  
                    insertRecs[1].TRANSDATE = transdate;  
                    insertRecs[1].DESCRIPTION = description2;  
                    insertRecs[1].PROCESSED = processed;  
  
                    try  
                    {  
                        recsInserted = aaTableClient.Insert(insertRecs, null, null);  
                    }  
                    catch (Exception ex)  
                    {  
                        // handle exception  
                        Console.WriteLine("Exception: " + ex.Message);  
                        throw;  
                    }  
  
                    Console.WriteLine("Insert Done: {0} records inserted", recsInserted);  

Sélectionner une opération

Le tableau suivant présente les paramètres de l’opération Select.

COLUMN_NAMES FILTER
Liste délimitée par des virgules de noms de colonnes dans la cible ; par exemple, « TID, ACCOUNT ». La liste de colonnes spécifie les colonnes de la cible qui doivent être retournées dans le jeu de résultats. Les colonnes non spécifiées dans la liste de colonnes seront définies sur leurs valeurs par défaut .NET dans le jeu d’enregistrements retourné. Pour les colonnes nillables, cette valeur est null. Le contenu d’une clause SQL WHERE qui spécifie les lignes cibles de la requête ; par exemple, « DESCRIPTION = 'Insérer un enregistrement #1' ». Vous pouvez définir ce paramètre sur null pour renvoyer toutes les lignes de la cible.

L’opération Select retourne un jeu d’enregistrements fortement typé en fonction du type de ligne de la cible.

Important

Il n’existe aucune prise en charge de la diffusion en continu pour les opérations SQL de base lorsque vous utilisez le modèle de service WCF. Si votre requête retourne un jeu d’enregistrements volumineux, vous pouvez peut-être améliorer les performances à l’aide du modèle de canal WCF. Pour plus d’informations, consultez Limitations de l’appel des opérations SQL de base à l’aide du modèle de service WCF.

Le code suivant montre une opération Select qui cible la table ACCOUNTACTIVITY. Les enregistrements retournés sont écrits dans la console.

// Declare a variable to hold the result set  
microsoft.lobservices.oracledb._2007._03.SCOTT.Table.ACCOUNTACTIVITY.ACCOUNTACTIVITYRECORDSELECT[] selectRecords;  
  
// Select all records and write them to the console  
try  
{  
    selectRecords = aaTableClient.Select("*", null);  
}  
catch (Exception ex)  
{  
    // handle exception  
}  
  
Console.WriteLine("ACCOUNTACTIVITY before any operations");  
for (int i = 0; i \< selectRecords.Length; i++)  
{  
    Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", selectRecords[i].TID,  
    selectRecords[i].ACCOUNT,  
    selectRecords[i].AMOUNT,  
    selectRecords[i].TRANSDATE,  
    selectRecords[i].DESCRIPTION);  
}  

Notes

Ce code omet les étapes de création, de configuration et d’ouverture du client WCF instance. Pour obtenir un exemple qui inclut ces étapes, consultez Opération d’insertion.

Opération de mise à jour

Le tableau suivant présente les paramètres de l’opération De mise à jour.

RECORDSET FILTER
Enregistrement de modèle fortement typé basé sur le type de ligne de la cible. L’enregistrement du modèle spécifie les valeurs de mise à jour pour les lignes cibles. Pour les colonnes de ligne nillables, vous pouvez spécifier une valeur Null pour indiquer que la colonne ne doit pas être mise à jour dans les lignes cibles. Contenu d’une clause SQL WHERE qui spécifie les lignes à mettre à jour dans la cible. Par exemple, « DESCRIPTION= 'Inserted Record #1' ».

L’opération De mise à jour retourne le nombre de lignes supprimées de la cible.

Important

Dans le modèle de service WCF, l’enregistrement de modèle utilisé dans l’opération de mise à jour est fortement typé. Si une colonne est nillable, vous pouvez omettre la colonne de l’opération De mise à jour en définissant sa valeur sur null dans l’enregistrement du modèle ; Toutefois, si une colonne n’est pas modifiable, vous devez définir sa valeur dans l’enregistrement du modèle. Par exemple, si une colonne est une clé primaire, elle doit contenir une valeur. Pour plus d’informations, consultez Limitations de l’appel des opérations SQL de base à l’aide du modèle de service WCF.

Le code suivant montre une opération de mise à jour qui cible la table ACCOUNTACTIVITY.

long recsUpdated;  
  
...  
  
// Create updated template. The TID, TIME, AMOUNT, and DESCRIPTION fields will be updated  
microsoft.lobservices.oracledb._2007._03.SCOTT.Table.ACCOUNTACTIVITY.ACCOUNTACTIVITYRECORDUPDATE updateRecord =  
    new microsoft.lobservices.oracledb._2007._03.SCOTT.Table.ACCOUNTACTIVITY.ACCOUNTACTIVITYRECORDUPDATE();  
        updateRecord.TID = tidSequence.NextVal();  
        updateRecord.ACCOUNT = null;  
        updateRecord.AMOUNT = 300;  
        updateRecord.TRANSDATE = DateTime.Now.Date;  
        updateRecord.DESCRIPTION = "Updated Record #2";  
        updateRecord.PROCESSED = null;  
  
// Set filter string to specify the target record by using the DESCRIPTION field  
string filter = "DESCRIPTION = 'Inserted Record #2'";  
  
try  
{  
    recsUpdated = aaTableClient.Update(updateRecord, filter);  
}  
catch (Exception ex)  
{  
    // handle exception  
    ...  
}  
  
Console.WriteLine("{0} records updated", recsUpdated);  

Notes

Ce code omet les étapes de création, de configuration et d’ouverture du client WCF instance. Pour obtenir un exemple qui inclut ces étapes, consultez Opération d’insertion.

Opération de suppression

Le tableau suivant présente les paramètres de l’opération Delete.

FILTER
Contenu d’une clause SQL WHERE qui spécifie les lignes à supprimer de la cible. Par exemple, « DESCRIPTION= 'Inserted Record #1' ».

L’opération Delete retourne le nombre de lignes supprimées de la cible. Le code suivant montre une opération Delete qui cible la table ACCOUNTACTIVITY.

// Set filter string equal to the DESCRIPTION field of the target record  
string filter = "DESCRIPTION = 'Inserted Record #1'";  
  
try  
{  
    recsDeleted = aaTableClient.Delete(filter);  
}  
catch (Exception ex)  
{  
    // handle exception  
  
    ...  
}  
Console.WriteLine("{0} records deleted", recsDeleted);  

Notes

Ce code omet les étapes de création, de configuration et d’ouverture du client WCF instance. Pour obtenir un exemple qui inclut ces étapes, consultez l’opération d’insertion.

Limitations de l’appel des opérations SQL de base à l’aide du modèle de service WCF

Les limitations suivantes existent lorsque vous appelez les opérations SQL de base à l’aide d’un client WCF :

  • Opération d’insertion. Le jeu d’enregistrements utilisé dans une opération d’insertion de plusieurs enregistrements est fortement typé et inclut donc toutes les colonnes de ligne. L’adaptateur Oracle Database interprète une valeur null dans un enregistrement comme signifiant que la colonne doit être exclue de l’opération Insert ; Toutefois, les colonnes non nillables ne peuvent pas être exclues, car vous ne pouvez pas les définir sur une valeur Null. Par conséquent, vous devez spécifier des valeurs pour les colonnes non nillables lorsque vous effectuez une opération d’insertion de plusieurs enregistrements.

  • Opération d’insertion. L’adaptateur Oracle Database interprète une valeur DbNull dans une colonne de données nillable pour signifier que la colonne doit être exclue d’une opération d’insertion de plusieurs enregistrements. Cela signifie que vous ne pouvez pas définir une colonne nillable sur DbNull sur la base de données Oracle dans une opération d’insertion de plusieurs enregistrements.

  • Opération d’insertion. Il n’existe aucune prise en charge de la diffusion en continu pour plusieurs opérations d’insertion d’enregistrements qui impliquent un jeu d’enregistrements volumineux.

  • Opération de mise à jour. L’enregistrement de modèle utilisé dans une opération de mise à jour est fortement typé et inclut donc toutes les colonnes de ligne. L’adaptateur Oracle Database interprète une valeur null dans cet enregistrement comme signifiant que la colonne doit être exclue de l’opération de mise à jour ; Toutefois, les colonnes non nillables ne peuvent pas être exclues, car vous ne pouvez pas les utiliser pour une valeur null. Par conséquent, vous devez spécifier des valeurs pour les colonnes non nillables lorsque vous effectuez une opération de mise à jour.

  • Opération de mise à jour. L’adaptateur Oracle Database interprète une valeur DbNull dans une colonne de données nillable dans l’enregistrement du modèle pour signifier que la colonne doit être exclue de l’opération. Cela signifie que vous ne pouvez pas définir une colonne nillable sur DbNull sur la base de données Oracle à l’aide de l’opération De mise à jour.

  • Sélectionnez l’opération. Il n’existe aucune prise en charge de la diffusion en continu pour les requêtes SELECT qui retournent un jeu d’enregistrements volumineux.

    Pour les scénarios où ces limitations présentent des défis, vous pouvez appeler l’opération à l’aide du modèle de canal WCF pour les raisons suivantes :

  • À l’aide du modèle de canal WCF, vous pouvez exclure des colonnes de données spécifiques des opérations Update et Insert.

  • Le modèle de canal WCF fournit la prise en charge de la diffusion en continu au niveau du nœud pour les opérations SQL de base de données de base de données exposées par l’adaptateur Oracle Database.

    Pour plus d’informations sur l’utilisation du modèle de canal WCF avec l’adaptateur Oracle Database, consultez Développer des applications de base de données Oracle à l’aide du modèle de canal WCF.

Voir aussi

Développer des applications de base de données Oracle à l’aide du modèle de canal WCF