Procedimientos Almacenados

Firebird soporta dos mecanismos para llamar a un procedimiento almacenado:

execute procedure MyProc(?,?)

En este ejemplo el procedimiento almacenado espera recibir datos basados en los parámetros que le son pasados. Si los parámetros no son válidos, nada será devuelto.

select * from MyProc(?,?)

En este ejemplo el procedimiento almacenado espera generar un set de resultado.

Programas como Microsoft Excel etc. utilizan lo siguiente para llamar a un procedimiento almacenado:

{[? =] Call MyProc (?,?)}.

El controlador Firebird ODBC determina qué tipo de llamado utilizará para ejecutar el procedimiento almacenado dependiendo de cómo fue construído ese procedimiento. La clave de ésto es la utilización de la palabra SUSPEND en la definición del procedimiento almacenado.

Si el código BLR para el procedimiento almacenado contiene if (countSUSPEND == 1) como sería el caso al utilizar la siguiente definición:

create procedure PRUEBA
  as
    begin
    end

Entonces el controlador ODBC utilizará execute procedure PRUEBA.

Si el código BLR para el procedimiento almacenado contiene if (countSUSPEND > 1) como sería al utilizar ésta definición:

create procedure "TODOS_LOS_IDIOMAS"
   returns ("CODIGO" varchar(5),
         "CATEGORIA" varchar(5),
         "PAIS" varchar(15),
         "IDIOMA" varchar(15))
   as
   BEGIN
     "IDIOMA" = null;
     FOR SELECT codigo_tarea, categoria_tarea, pais_tarea FROM tarea
     INTO :codigo, :categoria, :pais
     DO
       BEGIN
         FOR SELECT idiomas FROM mostrar_idiomas(:codigo, :categoria, :pais)
         INTO :idioma
           DO
             SUSPEND;
             /* Insertar agradables separadores entre filas */
             codigo = '=====';
             categoria = '=====';
             pais = '===============';
             idioma = '==============';
             SUSPEND;
       END
     END

Entonces el controlador ODBC utilizará select * from "TODOS_LOS_IDIOMAS"

Para mayores detalles sobre cómo hacer ésto y otros temas avanzados por favor consulte los ejemplos.