Invocar procedimientos almacenados

Para invocar un procedimiento almacenado en una base de datos, utilice la sentencia ESQL CALL. El procedimiento almacenado se debe definir mediante una Sentencia CREATE PROCEDURE que tenga:
  • Una cláusula Language de DATABASE
  • Una cláusula EXTERNAL NAME que identifique el nombre del procedimiento en la base de datos y, opcionalmente, el esquema de base de datos al que pertenece.

Cuando se invoca un procedimiento almacenado con una sentencia CALL, el intermediario se asegura de que coincidan la definición ESQL y la definición de base de datos:

Las siguientes restricciones se aplican al uso de procedimientos almacenados:

Creación de un procedimiento almacenado en ESQL

Al definir un procedimiento ESQL que corresponde a un procedimiento almacenado de base de datos, puede especificar un nombre calificado (donde el calificador es un esquema de base de datos) o un nombre no calificado.

Para crear un procedimiento almacenado:

  1. Codifique una sentencia similar a la de este ejemplo para crear un procedimiento no calificado:
    CREATE PROCEDURE myProc1(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL NAME "myProc";

    El EXTERNAL NAME que especifique debe coincidir con la definición que ha creado en la base de datos, pero puede especificar cualquier nombre que elija para el procedimiento ESQL correspondiente.

  2. Codifique una sentencia similar a la de este ejemplo para crear un procedimiento calificado:
    CREATE PROCEDURE myProc2(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL NAME "Schema1.myProc";
  3. Codifique una sentencia similar a la de este ejemplo para crear un procedimiento calificado en un paquete de Oracle:
    CREATE PROCEDURE myProc3(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL 
                     NAME "mySchema.myPackage.myProc";
Si desea ver ejemplos de definiciones de procedimiento almacenado de la base de datos, consulte el apartado Sentencia CREATE PROCEDURE.

Invocación de un procedimiento almacenado

  1. Codifique una sentencia similar a este ejemplo para invocar un procedimiento no calificado:
    CALL myProc1('HelloWorld');

    Puesto que no se ha definido explícitamente como perteneciente a ningún esquema, el procedimiento myProc1 debe existir en el esquema por omisión (cuyo nombre es el nombre de usuario utilizado para conectarse al origen de datos) o el mandato fallará.

  2. El ejemplo siguiente llama al procedimiento myProc del esquema Schema1.
    CALL myProc2('HelloWorld');
  3. Codifique una sentencia similar a la de este ejemplo para invocar un procedimiento no calificado con un esquema dinámico:
    DECLARE Schema2 char 'mySchema2';
    CALL myProc1('HelloWorld') IN Database.{'Schema2'};

    Esta sentencia llama al procedimiento myProc1 de la base de datos Schema2, invalidando el esquema "nombreusuario" por omisión.

Llamada a un procedimiento almacenado que devuelve dos conjuntos de resultados

Para llamar a un procedimiento almacenado que toma un parámetro de entrada y devuelve un parámetro de salida y dos conjuntos de resultados:
  1. Defina el procedimiento con una sentencia CREATE PROCEDURE que especifique un parámetro de entrada, un parámetro de salida y dos conjuntos de resultados:
    CREATE PROCEDURE myProc1 (IN P1 INT, OUT P2 INT)
      LANGUAGE DATABASE
      DYNAMIC RESULT SETS 2
      EXTERNAL NAME "myschema.myproc1";
  2. Para invocar el procedimiento myProc1 utilizando una referencia de campo, codifique:
    /* utilizando una referencia de campo */
    CALL myProc1(InVar1, OutVar2, Environment.ResultSet1[], OutputRoot.XML.Test.ResultSet2[]);
  3. Para invocar el procedimiento myProc1 utilizando una variable de referencia, codifique:
    /* utilizando una variable de
    referencia*/
    DECLARE cursor REFERENCE TO OutputRoot.XML.Test;
    
    CALL myProc1(InVar1, cursor.OutVar2, cursor.ResultSet1[], cursor.ResultSet2[]);
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ac17040_