Sentencia PASSTHRU

Utilice PASSTHRU para escribir sentencias ESQL que:
  • Eluden el Analizador de WebSphere Business Integration Message Broker
  • Van directamente a la base de datos del programa de fondo configurada
  • Ejecutar una sentencia codificada
PASSTHRU se puede utilizar como una sentencia y una función.

El primer parámetro de PASSTHRU debe ser una expresión ESQL válida que contiene la sintaxis de base de datos. PASSTHRU permite utilizar la sintaxis de base de datos no soportado normalmente por ESQL.

El comportamiento de la función PASSTHRU depende de si pasa uno, dos o más parámetros. El primer parámetro de la función PASSTHRU debe ser siempre una expresión ESQL que es, o se evalúa como una serie. Utilice signos de interrogación en la serie para indicar dónde es necesario realizar una sustitución de parámetro.

Si sólo pasa otro parámetro, dicho parámetro se evalúa como uno de los siguientes:
  • Un solo valor escalar. En caso afirmativo, se inserta en el primer marcador de parámetro.
  • Una lista de valores. En caso afirmativo, los elementos de la lista se insertan por orden en cada uno de los marcadores de parámetro en la serie.

Si pasa otros dos o más parámetros, cada parámetro se enlaza al signo de interrogación correspondiente en la serie de sentencia: es decir, el primer parámetro se enlaza al primer signo de interrogación, el segundo parámetro se enlaza al segundo signo de interrogación, y así sucesivamente.

Los signos de interrogación se procesan como marcadores de parámetro en una sentencia SQL preparada por DBMS. Si pasa valores a las funciones de DBMS, debe utilizar marcadores de parámetro con el tipo adecuado. Por ejemplo, en DB2 un marcador de parámetro se transformaría con CAST como se indica a continuación:
SET OutputRoot.XML.Result.Data[] =
    PASSTHRU('SELECT * FROM user1.stocktable 
    where time=TIMESTAMP(CAST(? as TIMESTAMP)),'1999-12-31-23.59.59.999999');
Estos son algunos ejemplos que muestran maneras diferentes de utilizar la sentencia PASSTHRU:
SET OutputRoot.XML.Result.Data[] = 
          PASSTHRU('SELECT * FROM user1.stocktable');
PASSTHRU('DELETE FROM user2.AccountData WHERE AccountId =
           ?', InputBody.Data.Account.Id);
SET OutputRoot.XML.Result.Data
  = PASSTHRU('SELECT AccountNum FROM user2.AccountData
    WHERE AccountId = ?', InputBody.Data.Account.Id);
SET OutputRoot.XML.Result.Data[]
  = PASSTHRU('SELECT AccountNum FROM user2.AccountData
              WHERE AccountId IN (? , ? , ?)',
            InputBody.Data.Account.Id[]);
PASSTHRU('INSERT INTO user1.stocktable (stock_id, quantity)
         values (?, ?)', InputBody.Transaction.Id, 
                           InputBody.Transaction.Quantity);

Utilización de arrastrar y soltar con PASSTHRU

Si utiliza arrastrar y soltar para crear ESQL, y la sentencia PASSTHRU contiene toda la sentencia ESQL, debe asegurarse de que incluya comillas alrededor de la sentencia ESQL que se aplica. Por ejemplo:
PASSTHRU('INSERT INTO user1.stocktable VALUES (1)');
Sin embargo, si primero se establece una variable y, a continuación, se hace referencia a ella en la sentencia PASSTHRU, omita las comillas. Por ejemplo:
SET myVar = 'SELECT * FROM user1.stocktable';
SET OutputRoot.XML.Data[] = PASSTHRU(myVar);

Consideraciones al llamar a procedimientos almacenados

Si utiliza la sentencia PASSTHRU para llamar a procedimientos almacenados, tenga en cuenta las consideraciones siguientes:
  • WebSphere Business Integration Message Broker utiliza Open Database Connectivity (ODBC) para conectar a bases de datos. ODBC Versión 1 proporciona soporte para llamadas de procedimiento almacenado utilizando la secuencia de escape ODBC siguiente:
    call nombre-procedimiento [([parámetro][,[parámetro]]...)]}

    Sólo la secuencia de escape descrita anteriormente está soportada para los parámetros de entrada de la función PASSTHRU en WebSphere Business Integration Message Broker.

  • Utilizando la sentencia ESQL CALL, puede llamar a un procedimiento almacenado de base de datos. Este procedimiento funciona como si se ejecutase una secuencia de sentencias ESQL en línea.
  • Pueden existir procedimientos almacenados:
    • Individualmente (soportados por DB2 y Oracle). Se puede escribir como se indica a continuación:
      PASSTHRU('{call proc_insert_comp(?,?)}',InputBody.Test.Company,InputBody.Test.Price);
    • Como parte de un colectivo al que se accede utilizando un mecanismo de Paquete (soportado por Oracle). Se puede escribir como se indica a continuación:
      PASSTHRU('{call share_management.add_share(?,?)}',
                         InputBody.Test.Company,InputBody.Test.Price); 
  • Los procedimientos almacenados pueden ser:
    Sin confirmación
    La lógica de procedimiento no toma una acción explícita de confirmación y restitución (soportada por DB2 y Oracle).

    Si un flujo de mensajes se confirma o se restituye, las operaciones de base de datos se confirman o se restituyen. Esto es coherente con el comportamiento de los nodos Database y Warehouse, que tienen una propiedad de transacción automática.

    Confirmación
    La lógica de procedimiento contiene acciones de confirmación y restitución explícitas (soportada por Oracle).

    Aunque se restituye un flujo de mensajes, se confirman las operaciones de base de datos. Esto es coherente con el comportamiento de los nodos Database y Warehouse, que tienen una propiedad de transacción de confirmación.

    Si desea más información sobre las transacciones coordinadas, consulte el apartado Configuración de flujos de mensajes coordinados.

    Las llamadas de procedimiento almacenado, si confirmación o no confirmación, afectan a las operaciones de base de datos (y la salida posterior) si se restituye un flujo de mensajes.

Limitaciones

Hay algunas limitaciones al utilizar PASSTHRU para llamar a procedimientos almacenados. Para ilustrar las limitaciones, examine el ejemplo siguiente:
PASSTHRU('{call proc_delete_comp(?)}',InputBody.Test.Company);
  1. WebSphere Business Integration Message Broker sólo da soporte a parámetros de entrada.
  2. WebSphere Business Integration Message Broker no puede utilizar SqlMoreResults para recuperar conjuntos de resultados.

Conceptos relacionados
ESQL

Tareas relacionadas
Desarrollo de ESQL
Invocar procedimientos almacenados

Referencia relacionada
Sentencia CALL
Sentencia CREATE PROCEDURE