Compartir a través de


Ejecución de la operación SQLEXECUTE en Oracle Database mediante el modelo de servicio WCF

El adaptador de BizTalk para oracle Database de Microsoft muestra un conjunto estándar de operaciones en artefactos de base de datos de Oracle. Mediante estas operaciones, puede hacer cosas como llamar a una función o procedimiento de Oracle, o realizar operaciones básicas del lenguaje de manipulación de datos sql (DML) en tablas. Sin embargo, puede haber escenarios controlados por la lógica de negocios que requieren que realice operaciones que el adaptador de Oracle Database no muestre. Por ejemplo, puede que desee:

  • Realice una operación en artefactos de base de datos que no estén expuestos por el adaptador de Oracle Database; por ejemplo, obtenga la CURVAL o NEXTVAL de una secuencia de Oracle.

  • Realizar operaciones del lenguaje de definición de datos; por ejemplo, cree una tabla.

  • Realizar operaciones en un artefacto de base de datos que no estaba presente en tiempo de diseño; por ejemplo, actualice los registros de una tabla temporal creada por la lógica de negocios.

  • Realizar operaciones DML más complejas en tablas que las operaciones que expone el adaptador de Oracle Database; por ejemplo, para realizar una consulta que incluya una cláusula JOIN.

    Para estos tipos de escenarios, el adaptador de Oracle Database muestra la operación SQLEXECUTE. Mediante la operación SQLEXECUTE, puede realizar una instrucción SQL parametrizada en la base de datos de Oracle. La operación SQLEXECUTE admite un bloque de parámetros de entrada formado por conjuntos de parámetros que permiten ejecutar la misma instrucción SQL una vez para cada conjunto. La operación SQLEXECUTE devuelve los resultados de la instrucción SQL en un conjunto de registros genérico.

Acerca de los ejemplos usados en este tema

En los ejemplos de este tema se usa una secuencia de Oracle denominada TID_SEQ. Se proporciona un script para generar esta secuencia 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 modelo de servicio WCF genera un cliente WCF dedicado, SQLEXECUTEClient, para la operación SQLEXECUTE. El código siguiente muestra SQLEXECUTEClient y la firma del método al que se llama para invocar la operación SQLEXECUTE.

public partial class SQLEXECUTEClient : System.ServiceModel.ClientBase<SQLEXECUTE>, SQLEXECUTE {  
  
    ...  
  
    public microsoft.lobservices.oracledb._2007._03.GenRecordRow[] SQLEXECUTE(string SQLSTATEMENT, string PARAMETERSCHEMA, microsoft.lobservices.oracledb._2007._03.PARAMETERDATA[] PARAMETERSET);   
}  

La operación SQLEXECUTE devuelve un conjunto de registros genérico. Este conjunto de registros contiene los valores (si existen) devueltos por las instrucciones que ejecuta la operación SQLEXECUTE. Puede pasar conjuntos de parámetros de entrada a la operación SQLEXECUTE en una colección de objetos PARAMETERDATA, cada uno de los cuales contiene una colección de parámetros de entrada representados como cadenas. En el código siguiente se muestra la definición de un conjunto PARAMETERDATA.

namespace microsoft.lobservices.oracledb._2007._03 {  
    using System.Runtime.Serialization;  
  
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]  
    [System.Runtime.Serialization.DataContractAttribute()]  
    public partial class PARAMETERDATA : object, System.Runtime.Serialization.IExtensibleDataObject {  
  
        ...  
  
        private string[] PARAMETERField;  
  
        ...  
  
        [System.Runtime.Serialization.DataMemberAttribute()]  
        public string[] PARAMETER {  
            get {  
                return this.PARAMETERField;  
            }  
            set {  
                this.PARAMETERField = value;  
            }  
        }  
    }  
}  

Invocar la operación SQLEXECUTE

Para invocar la operación SQLEXECUTE mediante un cliente WCF, realice los pasos siguientes.

  1. Genere una clase SQLEXECUTEClient para la tabla o vista de destino.

    Importante

    La operación SQLEXECUTE aparece bajo el nodo raíz (/) en el panel Seleccionar una categoría del cuadro de diálogo Agregar referencia de servicio de adaptador .

  2. Cree una instancia de la clase SQLEXECUTEClient e invoque el método SQLEXECUTE para ejecutar instrucciones SQL en la base de datos de Oracle.

    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, consulte Información general sobre el modelo de servicio WCF con el adaptador de base de datos de Oracle.

    En el ejemplo siguiente se usa SQLEXECUTEClient para obtener el siguiente valor de una secuencia de Oracle, TID_SEQ, ejecutando la siguiente instrucción SQL: SELECT tid_seq.nextval id from DUAL. A continuación, la salida se escribe en la consola.

using (SQLEXECUTEClient sqlClient = new SQLEXECUTEClient("OracleDBBinding_SQLEXECUTE"))  
{  
    sqlClient.ClientCredentials.UserName.UserName = "SCOTT";  
    sqlClient.ClientCredentials.UserName.Password = "TIGER";  
    try  
    {  
        sqlClient.Open();  
    }  
    catch (Exception ex)  
    {  
        Console.WriteLine("Error opening SQL client " + ex.Message);  
        throw;  
    }  
    microsoft.lobservices.oracledb._2007._03.GenRecordRow[] sequenceRec =   
        new microsoft.lobservices.oracledb._2007._03.GenRecordRow[0];  
  
    try  
    {  
        sequenceRec = sqlClient.SQLEXECUTE("SELECT tid_seq.nextval id from DUAL", null, null);  
    }  
    catch (Exception ex)  
    {  
        Console.WriteLine("Error executing SQL client " + ex.Message);  
        throw;  
    }  
  
    if (sequenceRec.Length > 0)  
    {  
        Console.WriteLine("TID_SEQUENCE value is {0}", sequenceRec[0].GenRecordColumn[0].ColumnValue);  
    }  
    else  
    {  
    Console.WriteLine("Couldn't get next TID_SEQUENCE value");  
    }  
}  

Consulte también

Desarrollo de aplicaciones de Oracle Database mediante el modelo de servicio WCF