Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un CURSOR REF es un tipo de datos PL/SQL que representa un puntero a un conjunto de resultados del lado servidor generado mediante la ejecución de una consulta. Un tipo REF CURSOR permite el streaming de entrada y salida de datos y es ideal para transferir grandes cantidades de datos hacia y desde un código PL/SQL. El adaptador de base de datos de Oracle proporciona soporte para cursores REF fuertemente tipados y de tipo débil (SYS_REFCURSOR) que se pueden pasar a procedimientos PL/SQL y funciones como parámetros IN, OUT o IN OUT. Para obtener más información sobre cómo el adaptador de base de datos de Oracle admite los CURSOR REF, vea Operaciones en funciones y procedimientos con parámetros REF CURSOR. Para obtener información sobre la estructura XML para CURSORES REF, vea Esquemas de mensaje para CURSORES REF.
¿Cómo invocar funciones en una base de datos de Oracle?
La realización de una operación en una base de datos de Oracle mediante el adaptador de base de datos de Oracle con BizTalk Server implica tareas de procedimientos descritas en Bloques de creación para desarrollar aplicaciones de BizTalk con Oracle Database. Para invocar una función en una base de datos de Oracle que toma REF CURSOR como parámetros de entrada y proporciona REF CURSOR como parámetros de salida, estas tareas son:
Cree un proyecto de BizTalk y genere esquema para la función que desea invocar en una base de datos de Oracle.
Cree mensajes en el proyecto de BizTalk para enviar y recibir mensajes de la base de datos de Oracle.
Cree una orquestación para invocar la función en la base de datos de Oracle.
Compile e implemente el proyecto de BizTalk.
Configure la aplicación de BizTalk mediante la creación de puertos de envío y recepción físicos.
Inicie la aplicación de BizTalk.
En este tema se proporcionan instrucciones para realizar estas tareas.
Ejemplo basado en este tema
También se proporciona un ejemplo de Func_RefCursor basado en este tema con el paquete de adaptadores de BizTalk. Para obtener más información, consulte Ejemplos de adaptador.
Generar esquema
En este tema, para demostrar cómo el adaptador de base de datos de Oracle admite la invocación de función que toma parámetros REF CURSOR, invocaremos el procedimiento GET_ACTIVITY. Este procedimiento toma un cursor REF IN con tipo débil y un cursor REF IN OUT con tipo fuerte como parámetros. La función devuelve un estado, un CURSOR REF OUT con un tipo débil y un CURSOR REF IN OUT con un tipo fuerte. El procedimiento GET_ACTIVITY está disponible como parte del ACCOUNT_PKG creado mediante la ejecución de los scripts SQL proporcionados con los ejemplos. Para obtener más información sobre los ejemplos y los scripts sql, consulte Ejemplos de esquema.
Por lo tanto, para invocar el procedimiento GET_ACTIVITY, generamos esquema para el mismo procedimiento en el esquema SCOTT\Package\ACCOUNT_PKG. Consulte Obtención de metadatos para las operaciones de Oracle Database en Visual Studio para obtener más información sobre cómo generar esquema.
Definición de mensajes y tipos de mensajes
El esquema que generó anteriormente describe los "tipos" necesarios para los mensajes de la orquestación. Normalmente, un mensaje es una variable, el tipo para el que se define mediante el esquema correspondiente. Debe vincular el esquema que generó en el primer paso a los mensajes desde la ventana Vista de orquestación del proyecto de BizTalk.
Para este tema, debe crear dos mensajes: uno para enviar una solicitud a la base de datos de Oracle y la otra para recibir una respuesta.
Realice los pasos siguientes para crear mensajes y vincularlos al esquema:
Para crear mensajes y vincular al esquema
Abra la ventana Vista de orquestación del proyecto de BizTalk, si aún no está abierta. Para ello, haga clic en Ver, seleccione Otras ventanas y, a continuación, haga clic en Vista de orquestación.
En la vista orquestación, haga clic con el botón derecho en Mensajes y, a continuación, haga clic en Nuevo mensaje.
Haga clic con el botón derecho en el mensaje recién creado y, a continuación, seleccione Ventana Propiedades.
En el panel Propiedades de Message_1, haga lo siguiente:
Usa esto Para Identificador Escriba Solicitud. Tipo de mensaje En la lista desplegable, expanda Esquemas y seleccione Func_RefCursor.OracleDBBindingSchema.GET_ACTIVITY, donde Func_RefCursor es el nombre del proyecto de BizTalk. OracleDBBindingSchema es el esquema generado para el procedimiento GET_ACTIVITY. Repita el paso anterior para crear un nuevo mensaje. En el panel Propiedades del nuevo mensaje, haga lo siguiente:
Usa esto Para Identificador Escriba Respuesta. Tipo de mensaje Func_RefCursor.OracleDBBindingSchema.GET_ACTIVITYResponse
Configuración de la orquestación
Debe crear una orquestación de BizTalk para usar BizTalk Server para invocar un procedimiento con parámetros REF CURSOR. En esta orquestación, se deja un mensaje de solicitud en una ubicación de recepción definida. El adaptador de Oracle Database consume este mensaje y lo pasa a la base de datos de Oracle a través de ODP. La respuesta de la base de datos de Oracle se guarda en otra ubicación. Una orquestación típica para invocar funciones y procedimientos con CURSOR REF contendrá:
Enviar y recibir formas para enviar mensajes a la base de datos de Oracle y recibir respuestas.
Puerto de recepción unidireccional para recibir mensajes de solicitud que se van a enviar a la base de datos de Oracle.
Puerto de envío bidireccional para enviar mensajes de solicitud a la base de datos de Oracle y recibir respuestas.
Un puerto de envío unidireccional para enviar las respuestas de la base de datos de Oracle a una carpeta.
Una orquestación de ejemplo es similar a la siguiente:
Agregar formas de mensaje
Asegúrese de especificar las siguientes propiedades para cada una de las formas de mensaje. Los nombres enumerados en la columna Shape son los nombres de las formas de mensaje tal como se muestran en la orquestación recién mencionada.
Forma | Tipo de forma | Propiedades |
---|---|---|
RecibirMensaje | Recibir | - Establecer nombre en ReceiveMessage - Establecer Activar en True |
EnviarMensaje | Enviar | - Establecer nombre en SendMessage |
RecibirRespuesta | Recibir | - Establecer Name en ReceiveResponse - Establecer Activar en False |
SendResponse | Enviar | - Establecer nombre en SendResponse |
Agregar puertos
Asegúrese de especificar las siguientes propiedades para cada uno de los puertos lógicos. Los nombres enumerados en la columna Puerto son los nombres de los puertos tal como aparecen en la orquestación.
Puerto | Propiedades |
---|---|
FileIn | - Establecer identificador en FileIn - Configura Tipo como FileInType - Establecer el patrón de comunicación en unidireccional - Establecer la dirección de comunicación para recibir |
LOBPort | - Establecer identificador en LOBPort - Establecer el tipo en LOBPortType - Establecer el patrón de comunicación en Request-Response - Establecer la dirección de comunicación en enviar y recibir |
GuardarRespuesta | - Establecer identificador en SaveResponse - Establecer Tipo en SaveResponseType - Establecer el patrón de comunicación en unidireccional - Establecer la dirección de comunicación en Enviar |
Especificar mensajes para formas de acción y conectarlos a puertos
En la tabla siguiente se especifican las propiedades y sus valores que se deben establecer para especificar mensajes para las formas de acción y vincularlos a los puertos. Los nombres enumerados en la columna Shape son los nombres de las formas de mensaje tal como se muestran en la orquestación mencionada anteriormente.
Forma | Propiedades |
---|---|
RecibirMensaje | - Establecer mensaje en solicitud - Establecer Operation en FileIn.REFCURSOR.Request |
EnviarMensaje | - Establecer mensaje en solicitud - Configurar Operación en LOBPort.REFCURSOR.Request |
RecibirRespuesta | - Establecer mensaje en respuesta - Establecer Operación en LOBPort.REFCURSOR.Response |
SendResponse | - Establecer mensaje en respuesta - Establecer Operación en SaveResponse.REFCURSOR.Request |
Una vez que haya especificado estas propiedades, las formas de mensaje y los puertos están conectados y se completa la orquestación.
Ahora debe compilar la solución de BizTalk e implementarla en un servidor de BizTalk Server. Para obtener más información, vea Compilar y ejecutar orquestaciones.
Configuración de la aplicación de BizTalk
Después de implementar el proyecto de BizTalk, la orquestación que creó anteriormente aparece en el panel Orquestaciones de la consola de administración de BizTalk Server. Debe usar la consola de administración de BizTalk Server para configurar la aplicación. Para ver un tutorial, consulte Tutorial: Implementación de una aplicación básica de BizTalk.
La configuración de una aplicación implica:
Selección de un host para la aplicación.
Asignación de los puertos que creó en la orquestación a puertos físicos en la consola de administración de BizTalk Server. Para esta orquestación, debes:
Defina una ubicación en el disco duro y un puerto de archivo correspondiente donde dejará un mensaje de solicitud. La orquestación de BizTalk consumirá el mensaje de solicitud y lo enviará a la base de datos de Oracle.
Defina una ubicación en el disco duro y un puerto de archivo correspondiente donde la orquestación de BizTalk dejará el mensaje de respuesta proveniente de la base de datos de Oracle.
Defina una WCF-Custom física o WCF-OracleDB puerto de envío para enviar mensajes a la base de datos de Oracle. También debe especificar la acción en el puerto de envío. Para obtener información sobre cómo crear puertos de WCF-Custom o WCF-OracleDB, consulte Configuración manual del enlace de puertos físicos al adaptador de base de datos de Oracle.
Nota:
La generación del esquema mediante el complemento del proyecto de BizTalk para consumir servicio de adaptador también crea un archivo de enlace que contiene información sobre los puertos y las acciones que se van a establecer para esos puertos. Puede importar este archivo de enlace desde la consola de administración de BizTalk Server para crear puertos de envío (para llamadas salientes) o puertos de recepción (para llamadas entrantes). Para obtener más información, consulte Configuración del enlace de puerto físico mediante el archivo de enlace de puertos en Oracle Database.
Iniciar la aplicación
Debe iniciar la aplicación de BizTalk para invocar un procedimiento en una tabla de base de datos de Oracle. Para obtener instrucciones sobre cómo iniciar una aplicación de BizTalk, vea Cómo iniciar una orquestación.
En esta fase, asegúrese de:
El puerto de recepción FILE para recibir mensajes de solicitud para la orquestación está en funcionamiento.
El puerto de envío "FILE" para recibir los mensajes de respuesta de la orquestación está en funcionamiento.
El puerto de envío WCF-Custom o WCF-OracleDB que envía mensajes a la base de datos de Oracle está en funcionamiento.
La orquestación de BizTalk para la operación se está ejecutando.
Ejecución de la operación
Después de ejecutar la aplicación, debe dejar caer un mensaje de solicitud en la ubicación de recepción de archivos FILE. El esquema del mensaje de solicitud debe ajustarse al esquema del procedimiento que generó anteriormente. Consulte Esquemas de mensajes para funciones y procedimientos para obtener más información sobre el esquema de mensajes de solicitud para invocar funciones mediante el adaptador de base de datos de Oracle.
Para invocar el procedimiento GET_ACTIVITY, debe especificar un REF CURSOR IN con tipo débil y un REF CURSOR IN OUT fuerte como parámetros. Por lo tanto, el mensaje de solicitud para invocar este procedimiento es:
<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>
La orquestación consume el mensaje de solicitud y lo envía a la base de datos de Oracle. La respuesta de la base de datos de Oracle se guarda en la otra ubicación file definida como parte de la orquestación.
La respuesta del mensaje de solicitud anterior es:
<?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>
Tenga en cuenta que la respuesta contiene un estado, un CURSOR REF OUT débilmente tipado y un CURSOR REF IN OUT fuertemente tipado.
Posibles excepciones
Para obtener información sobre las excepciones que puede encontrar al invocar funciones y procedimientos mediante BizTalk Server, vea Excepciones y control de errores.
Procedimientos recomendados
Después de implementar y configurar el proyecto de BizTalk, puede exportar opciones de configuración a un archivo XML denominado archivo de enlaces. Una vez que genere un archivo de enlaces, puede importar los valores de configuración del archivo para que no sea necesario crear los puertos de envío, los puertos de recepción, etc. para la misma orquestación. Para obtener más información sobre la vinculación de archivos, consulte Reutilizar vinculaciones del adaptador de base de datos de Oracle.