Procedimientos almacenados

Ejemplo de SQL y procedimientos almacenados de DB2 que puede utilizar con el proveedor de datos JDBC.

El proveedor de datos JDBC puede procesar los conjuntos de resultados que devuelve un procedimiento almacenado. Se pueden pasar parámetros de entrada de tipo serie o entero al procedimiento almacenado. La sintaxis siguiente ejecuta un procedimiento almacenado:
call[:índice] nombreProcedimiento [argumento] ...
Donde:
índice
Un entero opcional que especifica qué conjunto de resultados debe utilizar el proveedor de datos. Este parámetro es útil cuando el procedimiento almacenado devuelve varios conjuntos de resultados y desea recopilar solo los valores de uno de los conjuntos de resultados. Si no se especifica un índice, se recopilan y devuelven datos de cada conjunto de resultados.
nombreProcedimiento
El nombre del procedimiento almacenado que debe ejecutar el proveedor de datos JDBC.
argumento
Un argumento de entrada para el procedimiento almacenado. Si hay varios argumentos, deben separarse mediante comas. Si el argumento contiene un carácter de espacio, especifique todo el argumento entre comillas. Si el argumento se puede analizar como un entero, se pasa al procedimiento almacenado como un argumento de entero. Cualquier argumento entre comillas se pasa como un argumento de cadena.

Ejemplos de SQL Server

call sp_helpdb

Ejecuta el procedimiento call sp_helpdb que no requiere argumentos. Los datos procedentes de todos los conjuntos de resultados devueltos se incluyen en los datos que devuelve el proveedor de datos.

call:2 sp_helpdb master

Ejecuta el procedimiento sp_helpdb con el argumento maestro. Se trata de un argumento de entrada de serie. Solo los datos procedentes del segundo conjunto de resultados que devuelve el procedimiento almacenado se incluyen en los datos que devuelve el proveedor de datos.

Si no se especifica el índice, se recopilan datos procedentes de todos los conjuntos de resultados. Debe asegurarse de que los datos devueltos en estos casos sean compatibles con los atributos definidos. Agent Builder crea atributos a partir del primer conjunto de resultados devuelto y se espera que cualquier conjunto de resultados adicional sea compatible con el primero.

Procedimiento almacenado de DB2

Aquí se muestra una función de DB2 de muestra escrita en SQL. Esta función demuestra cómo devolver resultados que pueda procesar el proveedor de datos JDBC de Agent Builder:
-- Ejecute este script de la siguiente manera:
-- db2 -td# -vf db2sample.sql

-- Procedimiento para demostrar cómo devolver una consulta desde
-- un procedimiento almacenado de DB2, que posteriormente podrá utilizar 
-- un proveedor JDBC de Agent Builder. El procedimiento almacenado
-- devuelve las columnas siguientes:
-- Nombre             Descripción                  Tipo de datos
-- current_timestamp  Hora actual del sistema      indicación de fecha y hora
-- lock_timeout       Tiempo de espera de bloqueo  escala numérica 0
-- user               El usuario de la sesión      Cadena de 128 caracteres
DROP procedure db2sample#

CREATE PROCEDURE db2sample()
  RESULT SETS 1
  LANGUAGE SQL
BEGIN ATOMIC
  
  -- Defina la SQL para la consulta
  DECLARE c1 CURSOR WITH HOLD WITH RETURN FOR
  SELECT CURRENT TIMESTAMP as current_timestamp, 
CURRENT LOCK TIMEOUT as lock_timeout, CURRENT USER as user
  FROM sysibm.sysdummy1; 

  -- Envíe la consulta y devuelva los datos
  OPEN c1;
END#

Esta función se puede llamar desde Agent Builder utilizando la misma sintaxis definida para otros procedimientos almacenados. En este caso, se define call db2sample como la sentencia JDBC que debe ejecutar este procedimiento almacenado.

Procedimientos almacenados de Oracle

Los procedimientos almacenados de Oracle no devuelven conjuntos de resultados. El usuario debe escribir una función que devuelva un cursor de referencia de Oracle. Aquí se puede ver una función Oracle de muestra escrita en PL/SQL que demuestra como devolver resultados que pueda procesar el proveedor de datos JDBC de Agent Builder:
CREATE OR REPLACE FUNCTION ITMTEST
RETURN SYS_REFCURSOR
IS
        v_rc SYS_REFCURSOR;
COMENZAR
  OPEN v_rc FOR SELECT * FROM ALL_CLUSTERS;
  RETURN v_rc;
END;

Esta función se puede llamar desde Agent Builder utilizando la misma sintaxis definida para otros procedimientos almacenados. En este caso, se define call ITMTEST como la sentencia JDBC que debe ejecutar este procedimiento almacenado. Puesto que la función de Oracle debe devolver una referencia de cursor, las funciones de Oracle solo pueden procesar un conjunto de resultados. Esto significa que la opción index no recibe soporte para Oracle, ya que no hay manera de devolver varios conjuntos de resultados.