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.