Procesos de verbos de objeto comercial

Esta sección describe los aspectos siguientes del proceso de los verbos de un objeto comercial:

Determinación del verbo

Un objeto comercial de nivel superior y cada uno de sus objetos comerciales hijo puede contener sus propios verbos. Por tanto, un intermediario de integración puede pasar al conector un objeto comercial que tiene verbos diferentes para los objetos comerciales padre y los objetos comerciales hijo. Cuando se da esta condición, el conector utiliza el verbo del objeto comercial padre de nivel superior para determinar cómo procesar el objeto comercial completo. Para obtener más información, consulte Proceso de verbos.

Imágenes posteriores y deltas

Una imagen posterior es el estado de un objeto comercial después de realizar todos los cambios en el objeto. Un delta es un objeto comercial utilizado en una operación de actualización que sólo contiene valores de clave y los datos que se deben cambiar. Puesto que el conector sólo puede trabajar con imágenes posteriores, cuando recibe un objeto comercial para actualizar, el conector supone que el objeto comercial representa el estado deseado de los datos tras la actualización.

Por tanto, cuando un intermediario de integración envía al conector un objeto comercial con el verbo Actualizar, el conector cambia la representación actual del objeto comercial en la base de datos para que coincida exactamente con el objeto comercial de origen. Para hacer esto, el conector cambia valores de atributos simples y añade o elimina objetos comerciales hijo.

Por ejemplo, suponga que el estado actual de Contrato 2345 en la base de datos es el siguiente:

Suponga también que el intermediario de integración pasa el objeto comercial siguiente al conector:

Para procesar la actualización, el conector aplica los cambios siguientes a la base de datos:

Debido a que el conector supone que cada objeto comercial que recibe del intermediario de integración representa una imagen posterior, es importante asegurarse de que cada objeto comercial enviado para actualizar a ese conector contenga objetos comerciales hijo existentes válidos. Aunque no haya cambiado ninguno de los atributos simples de un objeto comercial hijo, el objeto comercial hijo debe estar incluido en el objeto comercial de origen.

Sin embargo, existe una forma de impedir que algunos conectores supriman objetos comerciales hijo faltantes durante una operación de actualización. Puede utilizar la información específica de la aplicación correspondiente al atributo representativo del hijo o matriz de hijos para indicar al conector que conserve los objetos comerciales hijo que no estén incluidos en el objeto comercial de origen. Para hacer esto, establezca KEEP_RELATIONSHIP en true. Para obtener más información, consulte Especificación de la clave foránea de un atributo.

Proceso de verbos

Esta sección describe los pasos que el conector emprende al crear, recuperar, actualizar o suprimir un objeto comercial que ha recibido de un intermediario de integración. El conector procesa los objetos comerciales jerárquicos de forma recursiva, es decir, ejecuta los mismos pasos para cada objeto comercial hijo hasta que ha procesado todos los objetos comerciales individuales.

Nota:
Un objeto comercial de nivel superior que sea un objeto envoltorio admite la utilización de los verbos de crear, recuperar, actualizar y suprimir. La única diferencia en el proceso de un objeto envoltorio es que el objeto envoltorio no se procesa, sólo se procesan los objetos que contiene.

Comparación de objetos comerciales

En diversos momentos del proceso descrito más abajo, el conector compara dos objetos comerciales para ver si son idénticos. Por ejemplo, durante una operación de actualización, el conector determina si un objeto comercial determinado existe en una matriz de objetos comerciales. Para realizar la comprobación, el conector compara el objeto comercial con cada objeto comercial contenido en la matriz. Para que dos objetos comerciales sean idénticos, se deben cumplir estas dos condiciones:

Operaciones de creación

Cuando crea un objeto comercial, el conector devuelve el código de estado VALCHANGE si la operación se ha realizado satisfactoriamente (con independencia de si la operación ha causado o no cambios en el objeto comercial), o devuelve FAIL si la operación ha fallado.

El conector ejecuta los pasos siguientes al crear un objeto comercial jerárquico:

  1. Inserta recursivamente cada objeto comercial hijo de cardinalidad simple contenido con propietario en la base de datos. Es decir, el conector crea el objeto hijo y todos los objetos hijo contenidos en el hijo y en sus hijos.

    Si la definición del objeto comercial especifica que un atributo representa un objeto comercial hijo con cardinalidad simple y que el atributo está vacío, el conector pasa por alto el atributo. Sin embargo, si la definición del objeto comercial necesita que un atributo represente un hijo y no lo hace, el conector devuelve un error y detiene el proceso.

  2. Procesa cada objeto comercial hijo de cardinalidad simple contenido sin propietario, de la manera siguiente:
    1. Intenta recursivamente recuperar el hijo de la base de datos utilizando los valores de clave pasados por el intermediario de integración.
    2. Si la recuperación es infructuosa, lo que indica que el hijo no existe actualmente en la base de datos, el conector devuelve un error y detiene el proceso. Si la recuperación se realiza satisfactoriamente, el conector actualiza recursivamente el objeto comercial hijo.
    Nota:
    Para que esta manera de proceder sea efectiva cuando el objeto comercial hijo ya existe en la base de datos de la aplicación, asegúrese de que las referencias cruzadas de los atributos de clave primaria de los objetos comerciales hijo sean correctas en las operaciones de creación. Si el objeto comercial hijo no existe ya en la base de datos de la aplicación, establezca los atributos de clave primaria en CxBlank.
  3. Inserta el objeto comercial de nivel superior en la base de datos, de esta manera:
    1. Establece los valores de clave foránea del objeto de nivel superior en los valores de clave primaria del correspondiente objeto comercial hijo representado con cardinalidad simple. Debido a que los valores contenidos en los objetos comerciales hijo pueden ser establecidos por secuencias o contadores de base de datos o por la propia base de datos durante la creación del hijo, este paso asegura que los valores de clave foránea del padre sean correctos antes de que el conector inserte el padre en la base de datos.
    2. Crea un nuevo valor de ID exclusivo para cada atributo definido automáticamente por la base de datos. El nombre de la secuencia o contador de base de datos se guarda en la información específica de la aplicación correspondiente al atributo. Si un atributo tiene una secuencia o contador de base de datos asociado, el valor creado por el conector sobrescribe cualquier valor pasado por el intermediario de integración. Para obtener más información sobre la especificación de una secuencia o contador de base de datos, consulte UID=AUTO en Información específica de la aplicación para atributos simples.
    3. Copia el valor de un atributo en el valor de otro atributo tal como especifica el parámetro CA (CopyAttribute) de la información específica de la aplicación correspondiente al atributo. Para obtener más información sobre la utilización del parámetro CA, consulte CA=set_attr_name en Información específica de la aplicación para atributos simples.
    4. Inserta el objeto comercial de nivel superior en la base de datos.
    Nota:
    Si el objeto comercial de nivel superior es un objeto envoltorio, no se insertará en la base de datos.
  4. Procesa cada uno de los objetos comerciales hijo de cardinalidad simple del objeto de nivel superior en los que la relación padre/hijo se guarda en el hijo, de la manera siguiente:
    1. Establece los valores de clave foránea del hijo para hacer referencia al valor de los correspondientes atributos de clave primaria contenidos en el padre. Debido a que los valores de clave primaria del padre se pueden haber generado durante la creación del padre, esto asegura que sean correctos los valores de clave foránea de cada hijo antes de que el conector inserte el hijo en la base de datos.
    2. Inserta el hijo en la base de datos.
  5. Procesa cada uno de los objetos comerciales hijo de cardinalidad múltiple contenidos en el objeto de nivel superior, de esta manera:
    1. Establece los valores de clave foránea de cada hijo para hacer referencia al valor de los correspondientes atributos de clave primaria contenidos en el padre. Debido a que los valores de clave primaria del padre se pueden haber generado durante la creación del padre, esto asegura que sean correctos los valores de clave foránea de cada hijo antes de que el conector inserte el hijo en la base de datos.
    2. Inserta cada objeto comercial hijo de cardinalidad múltiple en la base de datos.

Operaciones Retrieve (recuperación)

El conector ejecuta los pasos siguientes al recuperar objeto comercial jerárquico:

  1. Elimina todos los objetos comerciales hijo del objeto comercial de nivel superior que ha recibido del intermediario de integración.
  2. Recupera el objeto comercial de nivel superior de la base de datos.
    Notas:
    1. Un objeto comercial puede tener atributos que no corresponden a ninguna columna de base de datos, como los atributos marcadores de posición. Durante la recuperación, el conector no cambia tales atributos en el objeto comercial de nivel superior; estos atributos permanecen establecidos en los valores que han recibido del intermediario de integración. En los objetos comerciales hijo, el conector establece tales atributos en sus valores por omisión durante la recuperación.
    2. Un objeto comercial de nivel superior que sea un objeto envoltorio debe contener todos los valores de atributo de los objetos situados en el nivel inmediatamente por debajo del objeto envoltorio, los cuales serían necesarios para recuperar los objetos, incluidos los atributos de clave y los atributos marcadores de posición. El objeto envoltorio debe tener definidos todos los atributos de clave y atributos marcadores de posición. Los atributos simples del objeto envoltorio que se utilizarán como claves foráneas en los objetos situados en el nivel inmediatamente por debajo del envoltorio deben estar marcados como claves en el objeto envoltorio.
  3. El conector recupera recursivamente todos los objetos comerciales hijo de cardinalidad múltiple.
    Nota:
    El conector no exige la unicidad de los valores al llenar con datos una matriz de objetos comerciales. Corresponde a la base de datos garantizar la unicidad de los valores. Si la base de datos devuelve objetos comerciales hijo duplicados, el conector devuelve hijos duplicados.
  4. El conector recupera recursivamente cada hijo de cardinalidad simple, con independencia de si el objeto comercial hijo está contenido con o sin propietario.
    Nota:
    Todos los objetos comerciales hijo de cardinalidad simple se procesan de acuerdo con su aparición en el objeto comercial y antes de que se procese el objeto comercial padre. La posesión y no-posesión del objeto hijo no determinan la secuencia de proceso, pero sí el tipo de proceso.

Operaciones RetrieveByContent

El verbo RetrieveByContent sólo es aplicable al objeto comercial de nivel superior, pues el conector realiza operaciones de recuperación basándose en atributos que sólo existen en el objeto comercial de nivel superior.

Si un objeto comercial de nivel superior utiliza el verbo RetrieveByContent, se utilizan como criterios de recuperación todos los atributos no nulos (incluidos los atributos que no son de clave).

Si se devuelve más de una fila, el conector utiliza la primera fila como fila resultante y devuelve MULTIPLE_HITS.

Nota:
El verbo RetrieveByContent no es aplicable a un objeto comercial de nivel superior que sea un objeto envoltorio.

Operaciones Update (actualización)

Cuando actualiza un objeto comercial, el conector devuelve el código de estado VALCHANGE si la operación se ha realizado satisfactoriamente (con independencia de si la operación ha causado o no cambios en el objeto comercial), o devuelve FAIL si la operación ha fallado. Cuando trabaja con una base de datos Oracle, el conector bloquea los datos mientras los recupera para asegurar su integridad.

El conector ejecuta los pasos siguientes al actualizar un objeto comercial jerárquico:

  1. Utiliza los valores de clave primaria del objeto comercial de origen para recuperar la entidad correspondiente de la base de datos. El objeto comercial recuperado es una representación exacta del estado actual de los datos en la base de datos.
  2. El conector actualiza recursivamente todos los hijos de cardinalidad simple del objeto comercial de nivel superior.

    Si la definición de objeto comercial exige que un atributo represente un objeto comercial hijo, el hijo debe existir tanto en el objeto comercial de origen como en el objeto comercial recuperado. De lo contrario, la actualización falla y el conector devuelve un error.

    El conector maneja los hijos de cardinalidad simple contenidos con propietario de una de las maneras siguientes:

    Para los hijos de cardinalidad simple contenidos sin propietario, el conector intenta recuperar cada hijo de la base de datos que esté presente en el objeto comercial de origen. Si recupera el hijo con éxito, el conector llena con datos el objeto comercial hijo, pero no lo actualiza, pues el conector nunca modifica los hijos de cardinalidad simple contenidos sin propietario.

  3. Para los objetos comerciales hijo de cardinalidad simple que guardan la relación padre/hijo en el padre, el conector establece cada valor de clave foránea del padre en el valor de la clave primaria existente en el correspondiente objeto comercial hijo de cardinalidad simple. Este paso es necesario porque los hijos de cardinalidad simple se pueden haber añadido a la base de datos en pasos anteriores, dando lugar a la creación de nuevos ID exclusivos.
  4. El conector actualiza todos los atributos simples del objeto comercial recuperado, excepto aquéllos cuyo atributo correspondiente en el objeto comercial de origen contiene el valor CxIgnore.

    Debido a que el objeto comercial que se está actualizando debe ser exclusivo, el conector verifica que como resultado se procese una sola fila. El conector devuelve un error si se devuelve más de una fila.

  5. El conector asigna el valor de clave primaria del correspondiente objeto comercial padre a todos los valores de clave foránea de cada hijo que guarda la relación padre/hijo en el hijo (tanto de cardinalidad simple como de cardinalidad múltiple). (Cuando se utiliza InterChange Server como intermediario de integración, normalmente se han establecido referencias cruzadas entre estos valores durante la correlación de datos). Sin embargo, este paso es importante para asegurarse de que sean correctos los valores de clave foránea de los nuevos hijos que guardan la relación padre/hijo en el hijo, antes de que el conector actualice esos hijos.
  6. El conector procesa cada hijo de cardinalidad múltiple del objeto comercial recuperado de una de las maneras siguientes:

Nota:
El intermediario de integración debe asegurarse de que los objetos comerciales contenidos con cardinalidad múltiple en el objeto comercial de origen sean exclusivos (es decir, que una matriz no contenga dos o más ejemplares del mismo objeto comercial). Si el conector recibe duplicados de un objeto comercial en una matriz de origen, procesará el objeto comercial dos veces, lo cual puede producir resultados imprevisibles.

Operaciones DeltaUpdate

El proceso del verbo DeltaUpdate es diferente al proceso del verbo Update en los aspectos siguientes:

  1. En un DeltaUpdate no se realiza ninguna recuperación antes de la actualización, a diferencia de lo que ocurre en el proceso del verbo Update.
  2. No se realizan comparaciones entre el objeto comercial de entrada y el objeto comercial existente en la base de datos.
  3. Todos los hijos se procesan de acuerdo con el verbo definido en cada objeto hijo. Si un hijo no tiene un verbo definido en él, el conector devolverá un error.

Cuando realiza una actualización delta de un objeto comercial, el conector devuelve el código de estado VALCHANGE si la operación se ha realizado satisfactoriamente (con independencia de si la operación ha causado o no cambios en el objeto comercial), o devuelve FAIL si la operación ha fallado.

El conector ejecuta los pasos siguientes al efectuar una actualización delta de un objeto comercial jerárquico:

  1. Procesa recursivamente todos los hijos de cardinalidad simple del objeto padre. Si un hijo está marcado como IsRequired en la especificación del objeto comercial, el hijo debe estar presente en el objeto de entrada. De lo contrario, la actualización delta fallará y el conector devolverá un error.
  2. El conector establece todos los valores de clave foránea del padre que hacen referencia a atributos de hijos de cardinalidad simple en los valores correspondientes del objeto hijo. Esto es necesario porque los hijos de cardinalidad simple se pueden haber añadido a la base de datos en pasos anteriores, dando lugar a la creación de nuevos valores de secuencia.
  3. El conector actualiza mediante una sentencia UPDATE de SQL o un procedimiento almacenado el objeto actual que se está procesando. Se actualizan todos los atributos simples del objeto comercial individual, excepto aquellos atributos que tienen asignado el valor IsIgnore en el objeto comercial de entrada. El conector no compara a nivel de atributo el objeto de entrada con el objeto actual para determinar qué atributos es necesario añadir a la sentencia de actualización; se actualizan todos los atributos. Debido a que el objeto que se está actualizando debe ser exclusivo, el conector verifica que solamente se procese una sola fila como resultado. Se devuelve un error si se procesa más de una fila.
  4. El conector asigna los correspondientes valores del objeto padre a todos los valores de clave foránea en todos los hijos de cardinalidad N del objeto actual que hacen referencia a atributos del padre. Normalmente ya se habrán establecido referencias cruzadas entre estos valores durante la correlación de datos; sin embargo, esto puede no ser así para hijos nuevos existentes en contenedores de cardinalidad N. Este paso garantiza que los valores de clave foránea sean correctos en todos los hijos de cardinalidad N antes de que se actualicen esos hijos.
  5. El conector actualiza todos los contenedores de cardinalidad N del objeto actual.

Cuando se procesan los objetos hijo, se obtiene el verbo de cada hijo y se realiza la operación apropiada. Los verbos permitidos en una operación DeltaUpdate para un hijo son Create, Delete y DeltaUpdate.

Operaciones Delete (supresión)

Cuando suprime un objeto comercial, el conector devuelve el estado SUCCESS si la operación ha sido satisfactoria, o FAIL si la operación ha fallado. Primero se recupera el objeto comercial padre y luego el adaptador suprime recursivamente todos los hijos de cardinalidad simple que sean propiedad del padre; a continuación suprime el propio padre y finalmente todos los hijos de cardinalidad N. Los hijos sin propietario, de cardinalidad simple, no se suprimen nunca. Si el objeto comercial no existe, el conector devuelve el estado FAIL.

El conector puede realizar supresiones lógicas y físicas, dependiendo del valor del Nombre de la columna de estado (valor SCN) existente en la información específica de la aplicación correspondiente al objeto. Si el valor SCN está definido, el conector realiza una supresión lógica. Si el valor SCN no está definido, el conector realiza una supresión física.

Supresiones físicas

El conector ejecuta los pasos siguientes cuando realiza la supresión física de un objeto comercial jerárquico:

  1. Suprime recursivamente todos los objetos comerciales hijo de cardinalidad simple contenidos con propietario.
  2. Suprime el objeto comercial de nivel superior.
  3. Suprime recursivamente todos los objetos comerciales hijo de cardinalidad múltiple.

Nota:
Un objeto comercial de nivel superior que sea un objeto envoltorio carece de la tabla de base de datos correspondiente, por lo que no se suprime de la base de datos. Los valores de atributos simples de un objeto envoltorio no se tendrán en cuenta.
Supresiones lógicas

El conector ejecuta los pasos siguientes cuando realiza la supresión lógica de un objeto comercial:

  1. Emite una sentencia UPDATE que asigna al atributo de estado del objeto comercial el valor especificado por la información específica de la aplicación correspondiente al objeto comercial. El conector verifica que como resultado se actualice una sola fila de la base de datos y devuelve un error si se actualiza más de una fila.
  2. Realiza una supresión lógica recursiva de todos los hijos de cardinalidad simple contenidos con propietario y de todos los hijos de cardinalidad múltiple. El conector no suprime los hijos de cardinalidad simple contenidos sin propietario.

Sentencias de SQL

El conector puede utilizar sentencias simples de SQL para operaciones de selección, actualización, recuperación o supresión. Los nombres de columna utilizados para las sentencias de SQL se obtienen de la propiedad AppSpecificInfo de un atributo. Cada consulta abarca una sola tabla, a menos que se emita para una vista.

Procedimientos almacenados

Un procedimiento almacenado es un grupo de sentencias de SQL que forman una unidad lógica y ejecutan una tarea determinada. Un procedimiento almacenado abarca un conjunto de operaciones o consultas para que el conector las ejecute sobre un objeto contenido en un servidor de bases de datos.

El conector invoca un procedimiento almacenado en las circunstancias siguientes:

Cuando procesa un objeto comercial jerárquico, el conector puede utilizar un procedimiento almacenado para procesar el objeto comercial de nivel superior o cualquiera de sus objetos comerciales hijo. Pero cada objeto comercial o matriz de objetos comerciales debe tener su propio procedimiento almacenado.

Especificación de un procedimiento almacenado

Esta sección describe los pasos que debe seguir para hacer que el conector utilice un procedimiento almacenado para un objeto comercial. Se tratan los temas siguientes:

Adición de atributos al objeto comercial

Debe añadir una clase especial de atributo al objeto comercial para cada tipo de procedimiento almacenado que procese el conector. Estos atributos representan sólo el tipo de procedimiento almacenado y la información específica de la aplicación que lo define. Estos atributos no utilizan los parámetros de información específica de la aplicación que se pueden utilizar para un atributo simple estándar.

Designe el atributo de acuerdo con el tipo de procedimiento almacenado que se debe utilizar. Por ejemplo, para hacer que el conector utilice los procedimientos almacenados AfterUpdate y BeforeRetrieve, añada los atributos AfterUpdateSP y BeforeRetrieveSP.

El conector reconoce los nombres siguientes de atributos de objeto comercial:

BeforeCreateSP
 AfterCreateSP
 CreateSP
 BeforeUpdateSP
 AfterUpdateSP
 UpdateSP
 BeforeDeleteSP
 AfterDeleteSP
 DeleteSP
 BeforeRetrieveSP
 AfterRetrieveSP
 RetrieveSP
 BeforeRetrieveByContentSP
 AfterRetrieveByContentSP
 RetrieveByContentSP
 BeforeRetrieveUpdateSP
 AfterRetrieveUpdateSP
 RetrieveUpdateSP
 BeforeDeltaUpdateSP
 AfterDeltaUpdateSP
 DeltaUpdateSP

Nota:
Cree un atributo sólo para aquellos procedimientos almacenados que desee que sean ejecutados por el conector. Utilice la información específica de la aplicación o la correlación de datos (sólo si se utiliza InterChange Server como intermediario de integración) para especificar valores para estos atributos antes de que el objeto comercial se envíe al conector. Es necesario reiniciar el conector para que reconozca los cambios hechos en estos valores para las llamadas subsiguientes realizadas para un objeto comercial.
Sintaxis de un procedimiento almacenado

La sintaxis para especificar un procedimiento almacenado es la siguiente:

SPN=nombre_procedimiento_almacenado;RS=true|false[;IP=nombre_atributo1
 [:nombre_atributo2 [:...]]] [;OP=nombre_atributo1| RS[:nombre_atributo2| RS [:...]]]
 [;IO=nombre_atributo1[:nombre_atributo2[:...]]]

donde:

nombre_procedimiento_almacenado
Es el nombre del procedimiento almacenado.
RS
Es true si el procedimiento almacenado devuelve un conjunto de resultados, o false en caso contrario. El valor por omisión es false. Si el valor es true, la propiedad ColumnName contenida en la información específica de la aplicación de un atributo apunta a la columna apropiada del conjunto de resultados. Si RS forma parte de la lista de parámetros de salida, ese parámetro determinado devuelve un conjunto de resultados. Solamente se permite un sólo parámetro OUT como conjunto de resultados. Si se devuelve más de un conjunto de resultados como parámetro OUT, sólo se devuelve el primer conjunto de resultados y los demás se pasan por alto. Actualmente esta característica está disponible para Oracle 8i y versiones posteriores, para procedimientos almacenados que hacen uso del Controlador JDBC de Oracle. Para el procedimiento almacenado contenido en la base de datos, el parámetro correspondiente debe devolver un tipo REFCURSOR.
IP
Parámetros de entrada: es la lista de atributos de objeto comercial cuyos valores el conector debe utilizar como valores de entrada al ejecutar el procedimiento almacenado.
OP
Parámetros de salida: es la lista de atributos de objeto comercial a los cuales el conector debe devolver valores tras ejecutar el procedimiento almacenado. Consulte RS para obtener una descripción del conjunto de resultados.
IO
Parámetros de entrada/salida: es la lista de atributos de objeto comercial cuyos valores el conector debe utilizar como valores de entrada y a los cuales el conector debe devolver valores tras ejecutar el procedimiento almacenado.

El orden de los parámetros nombre_procedimiento_almacenado y RS es importante, no así el orden de los parámetros entre ellos. Es decir, no es importante para el conector si el procedimiento almacenado agrupa todos los parámetros de cada tipo o si mezcla los tipos de parámetros. Cuando varios parámetros del mismo tipo estén agrupados juntos, separe los valores utilizando un signo de dos puntos como delimitador; no es necesario que repita el tipo de parámetro para cada valor. Separe los parámetros de tipos diferentes utilizando un signo de punto y coma como delimitador. Cuando especifique valores de parámetros, no coloque un espacio en blanco en ninguno de los dos lados del signo de igualdad (=).

Ejemplos de procedimientos almacenados que devuelven conjuntos de resultados

Los ejemplos siguientes hacen uso de los procedimientos almacenados denominados CustomerAddressRetrieve y CustomerAddressRetrieveForOracleDB para devolver un conjunto de resultados que contiene varias direcciones y se utiliza para crear un objeto comercial hijo de cardinalidad N.

Nota:
Los conjuntos de resultados se procesan para el atributo RetrieveSP solamente y se utilizan para crear un objeto comercial hijo de cardinalidad N.

Para las bases de datos Oracle, el conjunto de resultados se devuelve como parámetro de salida y es procesado por el adaptador según convenga. Para otras bases de datos, el conjunto de resultados es un valor de retorno devuelto por el procedimiento almacenado.

Ejemplos de procedimientos almacenados que no devuelven conjuntos de resultados

Los ejemplos siguientes hacen uso de los procedimientos almacenados denominados CustomerInsert y VendorInsert que obtienen valores a partir de dos atributos de entrada, y devuelven valores para cuatro atributos de salida. Los ejemplos muestran diferentes estructuras para procedimientos almacenados.

El conector admite solamente los tipos de datos simples que son compatibles con el controlador JDBC.

Especificación del procedimiento almacenado

Existen dos formas de especificar el nombre del procedimiento almacenado y los valores de sus parámetros:

Nota:
Si se ejecuta un procedimiento almacenado para una operación de creación, actualización o supresión sobre un objeto comercial jerárquico que contiene una matriz de objetos comerciales hijo, el conector procesa cada objeto comercial hijo individualmente. Por ejemplo, si el conector ejecuta un procedimiento almacenado BeforeCreate, no procesa la matriz como una unidad, sino que procesa cada miembro de la matriz. Cuando el conector procesa un procedimiento almacenado BeforeRetrieve, el conector actúa sobre un objeto comercial individual. Cuando el conector procesa un procedimiento almacenado AfterRetrieve, el conector actúa sobre todos los objetos comerciales devueltos por la operación de recuperación.

Proceso de objetos comerciales utilizando procedimientos almacenados o sentencias simples de SQL

Los temas siguientes describen cómo el conector procesa los procedimientos almacenados:

Operaciones de creación de objetos comerciales

Normalmente un procedimiento almacenado Create devuelve valores que el conector utiliza para cumplimentar los atributos simples del objeto comercial de nivel superior. El conector ejecuta los pasos siguientes cuando procesa los procedimientos almacenados Create (BeforeCreate, Create, AfterCreate):

  1. Comprueba si el objeto comercial contiene un atributo BeforeCreateSP. Si el objeto comercial contiene el atributo, el conector invoca el procedimiento almacenado BeforeCreate.
  2. Si el procedimiento almacenado devuelve valores mediante parámetros de salida, el conector utiliza los valores para definir el valor de atributos simples del objeto comercial.
  3. El conector crea los objetos comerciales hijo de cardinalidad simple.
  4. Establece los valores de clave foránea del objeto comercial de nivel superior en el valor de clave primaria de cada objeto comercial hijo de cardinalidad simple.
  5. Comprueba si el objeto comercial contiene un atributo CreateSP. Si el objeto comercial contiene el atributo, el conector invoca el procedimiento almacenado Create para crear el objeto comercial de nivel superior. Si el objeto comercial no contiene el atributo, el conector crea y ejecuta una sentencia INSERT para crear el objeto comercial de nivel superior.
  6. Si el procedimiento almacenado Create devuelve valores mediante parámetros de salida, el conector utiliza los valores para definir el valor de atributos simples del objeto comercial.
  7. El conector establece el valor de clave foránea de cada hijo de cardinalidad múltiple en el valor del atributo de clave primaria del padre respectivo del objeto hijo.
  8. El conector crea los objetos comerciales hijo de cardinalidad múltiple.
  9. Comprueba si el objeto comercial contiene un atributo AfterCreateSP. Si el objeto comercial contiene el atributo, el conector invoca el procedimiento almacenado AfterCreate.
  10. Si el procedimiento almacenado devuelve valores mediante parámetros de salida, el conector utiliza los valores para definir el valor de atributos simples del objeto comercial.

El conector puede utilizar los valores devueltos en el paso 10 para cambiar el valor de un objeto comercial que creó en los pasos 3 o 5.

Operaciones de actualización de objetos comerciales

Normalmente un procedimiento almacenado Update devuelve valores que el conector utiliza para cumplimentar los atributos simples del objeto comercial de nivel superior. El conector ejecuta los pasos siguientes cuando procesa los procedimientos almacenados Update (BeforeUpdate, Update, AfterUpdate):

  1. Comprueba si el objeto comercial contiene un atributo BeforeUpdateSP. Si el objeto comercial contiene el atributo, el conector invoca el procedimiento almacenado BeforeUpdate.
  2. Si el procedimiento almacenado BeforeUpdate devuelve valores mediante parámetros de salida, el conector utiliza los valores para definir el valor de atributos simples del objeto comercial.
  3. El conector actualiza los objetos comerciales hijo de cardinalidad simple.
  4. Establece los valores de clave foránea del objeto comercial de nivel superior en el valor de clave primaria de cada objeto comercial hijo contenido con cardinalidad simple.
  5. Comprueba si el objeto comercial contiene un atributo UpdateSP. Si el objeto comercial contiene el atributo, el conector invoca el procedimiento almacenado Update para actualizar el objeto comercial de nivel superior. Si el objeto comercial no contiene el atributo, el conector crea y ejecuta una sentencia UPDATE para actualizar el objeto comercial de nivel superior.
  6. Si el procedimiento almacenado Update devuelve valores mediante parámetros de salida, el conector utiliza los valores para definir el valor de atributos simples del objeto comercial.
  7. Establece los valores de clave foránea de los hijos de cardinalidad múltiple para hacer referencia al valor de los correspondientes atributos de clave primaria contenidos en el padre.
  8. El conector actualiza los objetos comerciales hijo de cardinalidad múltiple.
  9. Comprueba si el objeto comercial contiene un atributo AfterUpdateSP. Si el objeto comercial contiene el atributo, el conector invoca el procedimiento almacenado AfterUpdate.
  10. Si el procedimiento almacenado devuelve valores mediante parámetros de salida, el conector utiliza los valores para definir el valor de atributos simples del objeto comercial.
Operaciones de supresión de objetos comerciales

Un procedimiento almacenado Delete no devuelve valores al conector. El conector ejecuta los pasos siguientes cuando procesa los procedimientos almacenados Delete (BeforeDelete, Delete, AfterDelete):

  1. Comprueba si el objeto comercial contiene un atributo BeforeDeleteSP. Si el objeto comercial contiene el atributo, el conector invoca el procedimiento almacenado BeforeUpdate.
  2. El conector suprime los objetos comerciales hijo de cardinalidad simple.
  3. El conector suprime los objetos comerciales hijo de cardinalidad múltiple.
  4. Comprueba si el objeto comercial contiene un atributo DeleteSP. Si el objeto comercial contiene el atributo, el conector invoca el procedimiento almacenado Delete para suprimir el objeto comercial de nivel superior. Si el objeto comercial no contiene el atributo, el conector crea y ejecuta una sentencia DELETE.
  5. Comprueba si el objeto comercial contiene un atributo AfterDeleteSP. Si el objeto comercial contiene el atributo, el conector invoca el procedimiento almacenado AfterDelete.
Operaciones de recuperación de objetos comerciales

Para las operaciones de recuperación simples, se pueden utilizar procedimientos almacenados para el objeto comercial de nivel superior, los hijos de cardinalidad simple así como para los hijos de cardinalidad múltiple. El orden de los procedimientos es el siguiente:

El conector crea un objeto temporal para recuperar un objeto comercial hijo de cardinalidad simple o de cardinalidad múltiple. El conector aplica el procedimiento almacenado BeforeRetrieve al objeto comercial temporal. El procedimiento almacenado AfterRetrieve se aplica a cada objeto hijo recuperado del contenedor.

El conector ejecuta el procedimiento almacenado AfterRetrieve después de ejecutar sobre el objeto comercial una consulta Retrieve generada dinámicamente a partir de los metadatos del objeto comercial o un procedimiento almacenado.

De acuerdo con la especificación JDBC, existen tres tipos de llamadas de procedimiento almacenado (StoredProcedure):

donde nombre_procedimiento_almacenado es el nombre del procedimiento almacenado.

El conector admite la utilización de los dos primeros tipos. El conector procesará el conjunto de resultados (ResultSet) devuelto por el procedimiento almacenado (StoredProcedure).

En la sintaxis del procedimiento almacenado, si RS=true, se procesa el conjunto de resultados del procedimiento almacenado. Si RS=false , no se procesa el conjunto de resultados. El valor por omisión de RS es false. Una vez procesados los valores del conjunto de resultados, se procesan las variables de salida del procedimiento almacenado. Si RS=true, los hijos de cardinalidad múltiple no pueden especificar las variables de salida en el procedimiento almacenado asociado.

Nota:
El proceso del conjunto de resultados sólo se permite para las operaciones del verbo Retrieve y para RetrieveSP.
Proceso del conjunto de resultados devuelto por un procedimiento almacenado de recuperación (RetrieveSP)

Para el conjunto de resultados devuelto por el procedimiento almacenado se obtienen metadatos del conjunto de resultados (ResultSetMetaData). Se obtienen los valores de todas las columnas del conjunto de resultados y esos valores se asignan al atributo correspondiente del objeto comercial. La propiedad ColumnName de la información específica de la aplicación correspondiente a un atributo debe contener el nombre de columna de ResultSet para asociar el atributo a la columna.

Para los objetos de cardinalidad simple, el correspondiente conjunto de resultados debe constar de una sola fila. Si se devuelven varias filas en el conjunto de resultados, se notifica un error.

Para los hijos de cardinalidad múltiple, se pueden devolver varias filas a través del conjunto de resultados. Para cada fila devuelta, se crea un nuevo objeto y se añade al contenedor. Luego el contenedor se añade al objeto padre en el índice de atributo necesario.

El hijo de cardinalidad N de un objeto comercial envoltorio tiene atributos de procedimiento almacenado, y los atributos representan los parámetros de entrada y las columnas del conjunto de resultados. WRAPPER=true se establece a nivel de la información específica de la aplicación correspondiente al objeto comercial. La información específica de la aplicación correspondiente al objeto comercial hijo tendrá TN=dummy.

Operaciones RetrieveByContent para objetos comerciales

Para las operaciones RetrieveByContent simples, se pueden utilizar procedimientos almacenados sólo para el objeto comercial de nivel superior y sus hijos de cardinalidad simple; es decir, no se pueden utilizar para devolver un conjunto de resultados ni varias filas. El orden de los procedimientos es el siguiente:

El conector crea un objeto temporal para recuperar un objeto comercial hijo de cardinalidad simple o de cardinalidad múltiple. Para los objetos comerciales de cardinalidad múltiple, el conector aplica el procedimiento almacenado BeforeRetrieveByContent al objeto comercial temporal. El procedimiento almacenado AfterRetrieveByContent se aplica a cada objeto hijo recuperado del contenedor.

El conector ejecuta el procedimiento almacenado AfterRetrieveByContent después de ejecutar sobre el objeto comercial una consulta RetrieveByContent generada dinámicamente a partir de los metadatos del objeto comercial o un procedimiento almacenado. En este caso, aunque la recuperación de un objeto comercial jerárquico también recupera sus objetos comerciales hijo, el conector ejecuta el procedimiento almacenado AfterRetrieveByContent para cada objeto comercial presente en la matriz.

Operaciones Retrieve-for-Update para objetos comerciales

Los procedimientos almacenados siguientes se invocan para el objeto comercial de nivel superior y recuperan todos los objetos comerciales hijo de la misma manera que la operación Retrieve simple.

El orden de los procedimientos es el siguiente:

Estos procedimientos almacenados ejecutan las mismas operaciones que BeforeRetrieve y AfterRetrieve. Los procedimientos tienen nombres distintivos para que el usuario pueda crear atributos diferentes que hagan que el conector ejecute tanto operaciones BeforeRetrieve como BeforeRetrieveUpdate, así como operaciones AfterRetrieve y AfterRetrieveUpdate.

El conector crea un objeto temporal para recuperar un objeto comercial hijo de cardinalidad simple o de cardinalidad múltiple. Para los objetos comerciales de cardinalidad múltiple, el conector aplica el procedimiento almacenado BeforeRetrieveUpdate al objeto comercial temporal. El procedimiento almacenado AfterRetrieveUpdate se aplica a cada objeto hijo recuperado del contenedor.

El conector ejecuta el procedimiento almacenado AfterRetrieveUpdate después de ejecutar sobre el objeto comercial una consulta RETRIEVE generada dinámicamente a partir de los metadatos del objeto comercial o un procedimiento almacenado. En este caso, aunque la recuperación de un objeto comercial jerárquico también recupera sus objetos comerciales hijo, el conector ejecuta el procedimiento almacenado AfterRetrieveUpdate para cada objeto comercial presente en la matriz.

Confirmación y retrotracción de transacciones

Cada vez que el conector recibe un objeto comercial para su proceso, el conector inicia un bloque de transacciones. Todas las sentencias de SQL que el conector ejecuta mientras procesa ese objeto comercial están encapsuladas dentro del bloque de transacciones. Cuando el conector finaliza el proceso del objeto comercial, confirma el bloque de transacciones si el proceso se realizó satisfactoriamente, o retrotrae la transacción si el conector encontró un error.

Copyright IBM Corp. 1997, 2004