Condividi tramite


Inserire, aggiornare, eliminare o selezionare operazioni nel database Oracle usando il modello di servizio WCF

L'adapter Microsoft BizTalk per Oracle Database visualizza un set di operazioni di base di inserimento, aggiornamento, eliminazione e selezione su tabelle e viste del database Oracle. Usando queste operazioni, è possibile eseguire semplici istruzioni SQL INSERT, UPDATE, SELECT e DELETE qualificate da una clausola WHERE in una tabella o una vista di destinazione. Per eseguire operazioni più complesse, ad esempio una query SQL SELECT che usa l'operatore JOIN, è possibile usare l'operazione SQLEXECUTE. Per altre informazioni sull'operazione SQLEXECUTE, vedere Esecuzione di un'operazione SQLEXECUTE nel database Oracle usando il modello di servizio WCF.

Nella tabella seguente vengono riepilogate le operazioni SQL di base che la scheda di database Oracle viene visualizzata su tabelle e viste. Per una descrizione completa di queste operazioni, vedere Schemi di messaggio per l'inserimento di base, l'aggiornamento, l'eliminazione e la selezione di operazioni su tabelle e viste.

Operazione Descrizione
Insert L'operazione Inserisci supporta più inserimenti di record o bulk nella tabella o nella vista di destinazione:

- Un'operazione di inserimento di più record inserisce righe in una tabella o in una vista in base a un set di record fornito.
- Un'operazione di inserimento bulk inserisce righe in una tabella o in una vista in base a un elenco di query e colonne SQL SELECT fornito. I record restituiti dalla query vengono inseriti nella tabella di destinazione in base all'elenco di colonne.
Selezione Esegue una query SQL SELECT nella tabella di destinazione in base a un elenco fornito di nomi di colonna e una stringa di filtro che specifica una clausola SQL WHERE.
Aggiornamento Esegue un AGGIORNAMENTO nella tabella di destinazione. I record da aggiornare vengono specificati da una stringa di filtro che specifica una clausola SQL WHERE. I valori per l'aggiornamento vengono specificati in un record modello.
Delete Esegue un delete nella tabella di destinazione in base a una clausola SQL WHERE specificata in una stringa di filtro.

Informazioni sugli esempi usati in questo argomento

Gli esempi in questo argomento usano la tabella /SCOTT/ACCOUNTACTIVITY. Uno script per generare questa tabella viene fornito con gli esempi di SDK. Per altre informazioni sugli esempi di SDK, vedere Esempi nell'SDK.

Classe client WCF

Il nome del client WCF generato per le operazioni SQL di base che l'adapter di database Oracle è basato sul nome della tabella o della vista, come nella tabella seguente.

Artefatto del database Oracle Nome client WCF
Tabella [SCHEMA] Tabella[TABLE_NAME]Client
Visualizzazione [SCHEMA] Visualizza[VIEW_NAME]Client

[SCHEMA] = Raccolta di artefatti Oracle; ad esempio SCOTT.

[TABLE_NAME] = Nome della tabella; ad esempio ACCOUNTACTIVITY.

[VIEW_NAME] = Nome della vista.

Nella tabella seguente vengono illustrate le firme del metodo per le operazioni SQL di base in una tabella. Le firme sono uguali per una visualizzazione, ad eccezione del fatto che lo spazio dei nomi della visualizzazione e il nome sostituiscono quelli della tabella.

Operazione Firma del metodo
Insert long Insert([TABLE_NS].[ TABLE_NAME]RECORDINSERT[] RECORDSET, stringa COLUMN_NAMES, stringa QUERY);
Selezione [TABLE_NS]. [TABLE_NAME] RECORDSELECT[] Select(string COLUMN_NAMES, string FILTER);
Aggiornamento long Update([TABLE_NS].[ TABLE_NAME]RECORDUPDATE RECORDSET, string FILTER);
Delete Long Delete(string FILTER);

[TABLE_NS] = Nome dello spazio dei nomi della tabella; ad esempio, microsoft.lobservices.oracledb._2007._03.SCOTT. Table.ACCOUNTACTIVITY.

[TABLE_NAME] = Nome della tabella; ad esempio ACCOUNTACTIVITY.

I tipi di record usati dalle operazioni Insert, Update e Select sono tutti definiti nello spazio dei nomi tabella o visualizzazione.

Il codice seguente mostra le firme del metodo per una classe client WCF generata per le operazioni Delete, Insert, Select e Update nella tabella /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);  
}  

Richiamare le operazioni SQL di base

Per richiamare le operazioni SQL di base in una tabella o in una vista usando un client WCF, seguire questa procedura.

  1. Generare una classe client WCF per la tabella o la vista di destinazione. Questa classe deve contenere metodi per le operazioni che verranno richiamate sull'artefatto di destinazione.

  2. Creare un'istanza della classe client WCF e richiamarne i metodi per eseguire operazioni sulla tabella o sulla vista.

    Per informazioni più dettagliate su come creare una classe client WCF e richiamare operazioni nell'adattatore Oracle Database, vedere Panoramica del modello di servizio WCF con l'adapter di database Oracle.

    L'adapter Oracle Database esegue ogni operazione all'interno di una transazione nel database Oracle. È possibile controllare il livello di isolamento di questa transazione impostando la proprietà di associazione TransactionIsolationLevel . Per altre informazioni sulle proprietà di associazione dell'adapter di database Oracle, vedere Uso di BizTalk Adapter for Oracle Database Binding Properties(Uso di BizTalk Adapter for Oracle Database Binding Properties).

    Le sezioni seguenti forniscono informazioni dettagliate su come richiamare ogni operazione SQL di base nel codice.

Operazioni di inserimento

Nella tabella seguente viene illustrato come impostare i parametri per più operazioni di inserimento e inserimento bulk dei record.

Inserisci tipo di operazione RECORDSET COLUMN_NAMES QUERY
Record multiplo Raccolta di INSERTRECORDS che deve essere inserita nella destinazione. Null Null
In blocco Null Elenco delimitato da virgole dei nomi di colonna nella destinazione; ad esempio"TID, ACCOUNT". L'elenco di colonne specifica le colonne in cui devono essere inseriti i risultati della query in ogni riga inserita. La query deve restituire un set di risultati corrispondente alle colonne specificate nell'elenco di colonne sia nel numero che nel tipo. Query SQL SELECT in una tabella o vista di database che restituisce un set di risultati da inserire nella destinazione; Ad esempio, "SELECT (TID, ACCOUNT) FROM NEW_TRANSACTIONS WHERE ACCOUNT = 100001". Il set di risultati deve corrispondere all'elenco di colonne sia nel numero che nel tipo.

L'operazione Inserisci restituisce il numero di record inseriti nella destinazione.

Importante

Nel modello di servizio WCF il set di record usato nell'operazione Inserisci è fortemente tipizzato. È possibile impostare il valore di una colonna nillable su Null in un record per escludere tale colonna dall'operazione Inserisci; tuttavia, non è possibile impostare il valore di una colonna non nillable su Null. Ciò significa che in un'operazione di inserimento di più record è necessario specificare valori per tutte le colonne non nillable in ogni record. Inoltre, non è disponibile alcun supporto di streaming per le operazioni SQL di base quando si usa il modello di servizio WCF. Se l'operazione di inserimento di più record comporta un set di record di grandi dimensioni, può essere una considerazione importante. Per altre informazioni, vedere Limitazioni per richiamare le operazioni SQL di base usando il modello di servizio WCF.

Il codice seguente mostra un'operazione di inserimento di più record (due record) destinata alla tabella 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);  

Selezionare Operazione

La tabella seguente mostra i parametri per l'operazione Select.

COLUMN_NAMES FILTER
Elenco delimitato da virgole dei nomi di colonna nella destinazione; ad esempio"TID, ACCOUNT". L'elenco di colonne specifica le colonne della destinazione che devono essere restituite nel set di risultati. Le colonne non specificate nell'elenco di colonne verranno impostate sui valori predefiniti .NET nel set di record restituito. Per le colonne nillable, questo valore è Null. Contenuto di una clausola SQL WHERE che specifica le righe di destinazione della query; ad esempio"DESCRIPTION = 'Inserisci record #1'". È possibile impostare questo parametro su Null per restituire tutte le righe della destinazione.

L'operazione Select restituisce un set di record fortemente tipizzato in base al tipo di riga della destinazione.

Importante

Non è disponibile alcun supporto di streaming per le operazioni SQL di base quando si usa il modello di servizio WCF. Se la query restituisce un set di record di grandi dimensioni, è possibile migliorare le prestazioni usando il modello di canale WCF. Per altre informazioni, vedere Limitazioni di richiamo delle operazioni SQL di base tramite il modello di servizio WCF.

Il codice seguente mostra un'operazione Select destinata alla tabella ACCOUNTACTIVITY. I record restituiti vengono scritti nella 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);  
}  

Nota

Questo codice omette i passaggi per creare, configurare e aprire l'istanza del client WCF. Per un esempio che include questi passaggi, vedere Insert Operation .For an example that includes these steps, see Insert Operation.

Operazione di aggiornamento

La tabella seguente illustra i parametri per l'operazione di aggiornamento.

RECORDSET FILTER
Record modello fortemente tipizzato in base al tipo di riga della destinazione. Il record modello specifica i valori di aggiornamento per le righe di destinazione. Per le colonne di riga nillable, è possibile specificare un valore Null per indicare che la colonna non deve essere aggiornata nelle righe di destinazione. Contenuto di una clausola SQL WHERE che specifica le righe da aggiornare nella destinazione. Ad esempio, "DESCRIPTION= 'Inserted Record #1'".

L'operazione Update restituisce il numero di righe eliminate dalla destinazione.

Importante

Nel modello di servizio WCF il record modello usato nell'operazione di aggiornamento è fortemente tipizzato. Se una colonna è nillable, è possibile omettere la colonna dall'operazione Di aggiornamento impostandone il valore su Null nel record modello; Tuttavia, se una colonna non è nillable, è necessario impostarne il valore nel record del modello. Ad esempio, se una colonna è una chiave primaria, deve contenere un valore. Per altre informazioni, vedere Limitazioni di richiamo delle operazioni SQL di base tramite il modello di servizio WCF.

Il codice seguente mostra un'operazione di aggiornamento destinata alla tabella 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);  

Nota

Questo codice omette i passaggi per creare, configurare e aprire l'istanza del client WCF. Per un esempio che include questi passaggi, vedere Insert Operation .For an example that includes these steps, see Insert Operation.

Operazioni di eliminazione

Nella tabella seguente vengono illustrati i parametri per l'operazione Delete.

FILTER
Contenuto di una clausola SQL WHERE che specifica le righe da eliminare dalla destinazione. Ad esempio, "DESCRIPTION= 'Inserted Record #1'".

L'operazione Delete restituisce il numero di righe eliminate dalla destinazione. Nel codice seguente viene illustrata un'operazione Delete destinata alla tabella 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);  

Nota

Questo codice omette i passaggi per creare, configurare e aprire l'istanza del client WCF. Per un esempio che include questi passaggi, vedere l'operazione di inserimento.

Limitazioni di richiamo delle operazioni SQL di base tramite il modello di servizio WCF

Quando si richiamano le operazioni SQL di base usando un client WCF, esistono le limitazioni seguenti:

  • Operazione di inserimento. Il set di record utilizzato in un'operazione di inserimento di più record è fortemente tipizzato e pertanto include tutte le colonne di riga. L'adattatore Oracle Database interpreta un valore Null in un record per indicare che la colonna deve essere esclusa dall'operazione Di inserimento; Non è tuttavia possibile escludere colonne non nillable perché non è possibile impostarle su un valore Null. È pertanto necessario specificare i valori per le colonne non nillable quando si esegue un'operazione di inserimento di più record.

  • Operazione di inserimento. L'adattatore Oracle Database interpreta un valore DbNull in una colonna di dati nillable per indicare che la colonna deve essere esclusa da un'operazione di inserimento di più record. Ciò significa che non è possibile impostare una colonna nillable su DbNull nel database Oracle in un'operazione di inserimento di più record.

  • Operazione di inserimento. Non è disponibile alcun supporto di streaming per più operazioni di inserimento di record che coinvolgono un set di record di grandi dimensioni.

  • Operazione di aggiornamento. Il record modello usato in un'operazione di aggiornamento è fortemente tipizzato e pertanto include tutte le colonne di riga. L'adattatore Oracle Database interpreta un valore Null in questo record per indicare che la colonna deve essere esclusa dall'operazione di aggiornamento; Non è tuttavia possibile escludere colonne non nillable perché non è possibile aggiungerle a un valore Null. È pertanto necessario specificare i valori per le colonne non nillable quando si esegue un'operazione di aggiornamento.

  • Operazione di aggiornamento. L'adattatore Oracle Database interpreta un valore DbNull in una colonna di dati nillable nel record modello per indicare che la colonna deve essere esclusa dall'operazione. Ciò significa che non è possibile impostare una colonna nillable su DbNull nel database Oracle usando l'operazione Di aggiornamento.

  • Selezionare l'operazione. Non è disponibile alcun supporto di streaming per le query SELECT che restituiscono un set di record di grandi dimensioni.

    Per gli scenari in cui queste limitazioni presentano problemi, è possibile richiamare l'operazione usando il modello di canale WCF perché:

  • Usando il modello di canale WCF, è possibile escludere colonne di dati specifiche dalle operazioni Di aggiornamento e inserimento.

  • Il modello di canale WCF fornisce il supporto di streaming a livello di nodo per le operazioni SQL di base esposte dall'adattatore di database Oracle.

    Per altre informazioni sull'uso del modello di canale WCF con l'adapter Oracle Database, vedere Sviluppare applicazioni di database Oracle tramite il modello di canale WCF.

Vedere anche

Sviluppare applicazioni di database Oracle usando il modello di canale WCF