Insertar, actualizar, eliminar o seleccionar operaciones en Oracle Database mediante el modelo de servicio WCF
El adaptador de Microsoft BizTalk para base de datos de Oracle muestra un conjunto de operaciones básicas de inserción, actualización, eliminación y selección en las tablas y vistas de base de datos de Oracle. Mediante estas operaciones, puede realizar instrucciones SQL INSERT, UPDATE, SELECT y DELETE sencillas calificadas por una cláusula WHERE en una tabla o vista de destino. Para realizar operaciones más complejas, por ejemplo, una consulta SELECT de SQL que usa el operador JOIN, puede usar la operación SQLEXECUTE. Para obtener más información sobre la operación SQLEXECUTE, vea Realizar una operación SQLEXECUTE en oracle Database mediante el modelo de servicio WCF.
En la tabla siguiente se resumen las operaciones SQL básicas que muestra el adaptador de Oracle Database en tablas y vistas. Para obtener una descripción completa de estas operaciones, vea Esquemas de mensajes para las operaciones básicas de inserción, actualización, eliminación y selección de tablas y vistas.
Operación | Descripción |
---|---|
Insertar | La operación De inserción admite varias inserciones masivas o de registro en la tabla o vista de destino: - Una operación insertada de varios registros inserta filas en una tabla o vista basada en un conjunto de registros proporcionado. - Una operación de inserción masiva inserta filas en una tabla o vista basada en una lista de columnas y consultas SELECT de SQL proporcionadas. Los registros que devuelve la consulta se insertan en la tabla de destino en función de la lista de columnas. |
Seleccionar | Realiza una consulta SQL SELECT en la tabla de destino basada en una lista proporcionada de nombres de columna y una cadena de filtro que especifica una cláusula WHERE de SQL. |
Actualizar | Realiza una ACTUALIZACIÓN en la tabla de destino. Los registros que se van a actualizar se especifican mediante una cadena de filtro que especifica una cláusula WHERE de SQL. Los valores de la actualización se especifican en un registro de plantilla. |
Eliminar | Realiza una instrucción DELETE en la tabla de destino basada en una cláusula WHERE de SQL especificada en una cadena de filtro. |
Acerca de los ejemplos usados en este tema
Los ejemplos de este tema usan la tabla /SCOTT/ACCOUNTACTIVITY. Se proporciona un script para generar esta tabla con los ejemplos del SDK. Para obtener más información sobre los ejemplos del SDK, consulte Ejemplos en el SDK.
Clase de cliente WCF
El nombre del cliente WCF generado para las operaciones SQL básicas que expone el adaptador de Oracle Database se basa en el nombre de la tabla o vista, como en la tabla siguiente.
Artefacto de base de datos de Oracle | Nombre del cliente WCF |
---|---|
Tabla | [SCHEMA] Table[TABLE_NAME]Client |
Ver | [SCHEMA] View[VIEW_NAME]Client |
[SCHEMA] = Colección de artefactos de Oracle; por ejemplo, SCOTT.
[TABLE_NAME] = El nombre de la tabla; por ejemplo, ACCOUNTACTIVITY.
[VIEW_NAME] = El nombre de la vista.
En la tabla siguiente se muestran las firmas de método para las operaciones SQL básicas en una tabla. Las firmas son las mismas para una vista, salvo que el espacio de nombres y el nombre de la vista reemplazan a los de la tabla.
Operación | Firma del método |
---|---|
Insertar | long Insert([TABLE_NS].[ TABLE_NAME]RECORDINSERT[] RECORDSET, string COLUMN_NAMES, string QUERY); |
Seleccionar | [TABLE_NS]. [TABLE_NAME] RECORDSELECT[] Select(string COLUMN_NAMES, string FILTER); |
Actualizar | long Update([TABLE_NS].[ TABLE_NAME]RECORDUPDATE RECORDSET, string FILTER); |
Eliminar | Long Delete(string FILTER); |
[TABLE_NS] = El nombre del espacio de nombres de la tabla; por ejemplo, microsoft.lobservices.oracledb._2007._03.SCOTT. Table.ACCOUNTACTIVITY.
[TABLE_NAME] = El nombre de la tabla; por ejemplo, ACCOUNTACTIVITY.
Los tipos de registro usados por las operaciones Insertar, Actualizar y Seleccionar se definen en el espacio de nombres de tabla o vista.
En el código siguiente se muestran las firmas de método para una clase de cliente WCF generada para las operaciones Delete, Insert, Select y Update en la tabla /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);
}
Invocar las operaciones básicas de SQL
Para invocar las operaciones SQL básicas en una tabla o vista mediante un cliente WCF, realice los pasos siguientes.
Genere una clase de cliente WCF para la tabla o vista de destino. Esta clase debe contener métodos para las operaciones que invocará en el artefacto de destino.
Cree una instancia de la clase de cliente WCF e invoque sus métodos para realizar operaciones en la tabla o vista.
Para obtener información más detallada sobre cómo crear una clase de cliente WCF e invocar operaciones en el adaptador de base de datos de Oracle, vea Información general del modelo de servicio WCF con el adaptador de base de datos de Oracle.
El adaptador de base de datos de Oracle ejecuta cada operación dentro de una transacción en la base de datos de Oracle. Puede controlar el nivel de aislamiento de esta transacción estableciendo la propiedad de enlace TransactionIsolationLevel . Para obtener más información sobre las propiedades de enlace del adaptador de base de datos de Oracle, vea Trabajar con el adaptador de BizTalk para propiedades de enlace de base de datos de Oracle.
En las secciones siguientes se proporcionan detalles sobre cómo invocar cada operación SQL básica en el código.
Operación de inserción
En la tabla siguiente se muestra cómo establecer parámetros para varias operaciones insert y bulk Insert de registros.
Insertar tipo de operación | RECORDSET | COLUMN_NAMES | QUERY |
---|---|---|---|
Registro múltiple | Colección de INSERTRECORDS que se debe insertar en el destino. | null | null |
En bloque | null | Lista delimitada por comas de nombres de columna en el destino; por ejemplo, "TID, ACCOUNT". La lista de columnas especifica las columnas en las que se deben colocar los resultados de la consulta en cada fila insertada. La consulta debe devolver un conjunto de resultados que coincida con las columnas especificadas en la lista de columnas tanto en el número como en el tipo. | Una consulta SELECT de SQL en una tabla o vista de base de datos que devuelve un conjunto de resultados que se va a insertar en el destino; por ejemplo, "SELECT (TID, ACCOUNT) FROM NEW_TRANSACTIONS WHERE ACCOUNT = 100001". El conjunto de resultados debe coincidir con la lista de columnas tanto en el número como en el tipo. |
La operación Insertar devuelve el número de registros insertados en el destino.
Importante
En el modelo de servicio WCF, el conjunto de registros usado en la operación De inserción está fuertemente tipado. Puede establecer el valor de una columna nillable en null en un registro para excluir esa columna de la operación Insertar; sin embargo, no se puede establecer el valor de una columna no nillable en NULL. Esto significa que, en una operación Insert de varios registros, debe proporcionar valores para todas las columnas no nillables de cada registro. Además, no hay compatibilidad de streaming con las operaciones SQL básicas cuando se usa el modelo de servicio WCF. Si la operación insert de varios registros implica un conjunto de registros grande, puede ser una consideración importante. Para obtener más información, vea Limitaciones de invocar las operaciones SQL básicas mediante el modelo de servicio WCF.
El código siguiente muestra una operación insertada de varios registros (dos registros) que tiene como destino la tabla 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);
Seleccionar operación
En la tabla siguiente se muestran los parámetros de la operación Select.
COLUMN_NAMES | FILTER |
---|---|
Lista delimitada por comas de nombres de columna en el destino; por ejemplo, "TID, ACCOUNT". La lista de columnas especifica las columnas del destino que se deben devolver en el conjunto de resultados. Las columnas no especificadas en la lista de columnas se establecerán en sus valores predeterminados de .NET en el conjunto de registros devuelto. En el caso de las columnas nillables, este valor es NULL. | El contenido de una cláusula WHERE de SQL que especifica las filas de destino de la consulta; por ejemplo, "DESCRIPTION = 'Insertar registro #1'". Puede establecer este parámetro en NULL para devolver todas las filas del destino. |
La operación Select devuelve un conjunto de registros fuertemente tipado basado en el tipo de fila del destino.
Importante
No hay compatibilidad de streaming con las operaciones sql básicas cuando se usa el modelo de servicio WCF. Si la consulta devuelve un conjunto de registros grande, es posible que pueda mejorar el rendimiento mediante el modelo de canal WCF. Para obtener más información, vea Limitaciones de invocar las operaciones SQL básicas mediante el modelo de servicio WCF.
El código siguiente muestra una operación Select que tiene como destino la tabla ACCOUNTACTIVITY. Los registros devueltos se escriben en la consola.
// 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
Este código omite los pasos para crear, configurar y abrir la instancia de cliente WCF. Para obtener un ejemplo que incluya estos pasos, consulte Operación de inserción.
Operación de actualización
En la tabla siguiente se muestran los parámetros de la operación De actualización.
RECORDSET | FILTER |
---|---|
Un registro de plantilla fuertemente tipado basado en el tipo de fila del destino. El registro de plantilla especifica los valores de actualización de las filas de destino. En el caso de las columnas de fila nillable, puede especificar un valor NULL para indicar que la columna no se debe actualizar en las filas de destino. | Contenido de una cláusula WHERE de SQL que especifica las filas que se van a actualizar en el destino. Por ejemplo, "DESCRIPTION= 'Inserted Record #1'". |
La operación De actualización devuelve el número de filas eliminadas del destino.
Importante
En el modelo de servicio WCF, el registro de plantilla usado en la operación de actualización está fuertemente tipado. Si una columna es nillable, puede omitir la columna de la operación De actualización estableciendo su valor en NULL en el registro de plantilla; sin embargo, si una columna no es nillable, debe establecer su valor en el registro de plantilla. Por ejemplo, si una columna es una clave principal, debe contener un valor . Para obtener más información, vea Limitaciones de invocar las operaciones SQL básicas mediante el modelo de servicio WCF.
El código siguiente muestra una operación de actualización que tiene como destino la tabla 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
Este código omite los pasos para crear, configurar y abrir la instancia de cliente WCF. Para obtener un ejemplo que incluya estos pasos, consulte Operación de inserción.
Operación de eliminación
En la tabla siguiente se muestran los parámetros de la operación Delete.
FILTER |
---|
El contenido de una cláusula WHERE de SQL que especifica las filas que se van a eliminar del destino. Por ejemplo, "DESCRIPTION= 'Inserted Record #1'". |
La operación Delete devuelve el número de filas eliminadas del destino. El código siguiente muestra una operación Delete que tiene como destino la tabla 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
Este código omite los pasos para crear, configurar y abrir la instancia de cliente WCF. Para obtener un ejemplo que incluya estos pasos, consulte operación de inserción.
Limitaciones de invocar las operaciones SQL básicas mediante el modelo de servicio WCF
Existen las siguientes limitaciones al invocar las operaciones sql básicas mediante un cliente WCF:
Operación de inserción. El conjunto de registros usado en una operación insert de varios registros está fuertemente tipado y, por tanto, incluye todas las columnas de fila. El adaptador de Base de datos de Oracle interpreta un valor NULL en un registro para significar que la columna debe excluirse de la operación Insertar; sin embargo, no se pueden excluir columnas que no son nillables porque no se pueden establecer en un valor NULL. Por lo tanto, debe especificar valores para las columnas que no son nillables al realizar una operación insert de varios registros.
Operación de inserción. El adaptador de Oracle Database interpreta un valor DbNull en una columna de datos nillable para significar que la columna debe excluirse de una operación insert de varios registros. Esto significa que no se puede establecer una columna nillable en DbNull en la base de datos de Oracle en una operación insert de varios registros.
Operación de inserción. No hay compatibilidad de streaming con varias operaciones de inserción de registros que impliquen un conjunto de registros grande.
Operación de actualización. El registro de plantilla usado en una operación de actualización está fuertemente tipado y, por tanto, incluye todas las columnas de fila. El adaptador de Oracle Database interpreta un valor NULL en este registro para significar que la columna debe excluirse de la operación de actualización; sin embargo, no se pueden excluir las columnas que no son de nillable porque no se pueden excluir en un valor NULL. Por lo tanto, debe especificar valores para las columnas que no son nillables al realizar una operación de actualización.
Operación de actualización. El adaptador de Oracle Database interpreta un valor DbNull en una columna de datos nillable del registro de plantilla para significar que la columna debe excluirse de la operación. Esto significa que no se puede establecer una columna nillable en DbNull en la base de datos de Oracle mediante la operación De actualización.
Seleccione la operación. No hay compatibilidad de streaming con consultas SELECT que devuelven un conjunto de registros grande.
En escenarios en los que estas limitaciones presentan desafíos, puede invocar la operación mediante el modelo de canal WCF porque:
Mediante el modelo de canal WCF, puede excluir columnas de datos específicas de las operaciones Update e Insert.
El modelo de canal WCF proporciona compatibilidad de streaming de nivel de nodo para las operaciones SQL básicas que expone el adaptador de Oracle Database.
Para obtener más información sobre el uso del modelo de canal WCF con el adaptador de base de datos de Oracle, vea Desarrollar aplicaciones de base de datos de Oracle mediante el modelo de canal WCF.
Consulte también
Desarrollo de aplicaciones de base de datos de Oracle mediante el modelo de canal WCF