Hola rruffino.
No tengo a mano la versión 2.1 como para probar, pero creo que no tendrías problemas enviando parámetros del tipo DATE, al modo de este ejemplo:
Código SQL
[-]
SET TERM ^ ;
CREATE OR ALTER PROCEDURE SP_TEMP2 (
P_FECHA DATE )
RETURNS (
FEC DATE,
COD VARCHAR(10),
ART VARCHAR(40))
AS
DECLARE VARIABLE STMT VARCHAR(500);
BEGIN
FOR EXECUTE STATEMENT
'SELECT FECHA, COD_FACT, ARTICULO ' ||
'FROM VENTAS WHERE FECHA <= ' || :P_FECHA
INTO
:FEC,
:COD,
:ART
DO BEGIN
SUSPEND;
END
END^
SET TERM ; ^
Si usaras la versión 2.5 o superior, podes hacer uso de parámetros dinámicos como en los siguientes ejemplos:
. Usando parámetros con nombre.
Código SQL
[-]
SET TERM ^ ;
CREATE OR ALTER PROCEDURE SP_TEMP (
P_FECHA DATE )
RETURNS (
FEC DATE,
COD VARCHAR(10),
ART VARCHAR(40))
AS
DECLARE VARIABLE STMT VARCHAR(500);
BEGIN
STMT = 'SELECT FECHA, COD_FACT, ARTICULO ' ||
'FROM VENTAS WHERE FECHA <= :A';
FOR EXECUTE STATEMENT (:STMT)(A := :P_FECHA)
INTO
:FEC,
:COD,
:ART
DO BEGIN
SUSPEND;
END
END^
SET TERM ; ^
. Usando parámetros sin nombre.
Código SQL
[-]
SET TERM ^ ;
CREATE OR ALTER PROCEDURE SP_TEMP (
P_FECHA DATE )
RETURNS (
FEC DATE,
COD VARCHAR(10),
ART VARCHAR(40))
AS
DECLARE VARIABLE STMT VARCHAR(500);
BEGIN
STMT = 'SELECT FECHA, COD_FACT, ARTICULO ' ||
'FROM VENTAS WHERE FECHA <= ?';
FOR EXECUTE STATEMENT (:STMT)(:P_FECHA)
INTO
:FEC,
:COD,
:ART
DO BEGIN
SUSPEND;
END
END^
SET TERM ; ^
Los tres ejemplos de SP se pueden llamar del mismo modo:
Código SQL
[-]SELECT FEC, COD, ART FROM SP_TEMP( '19.4.2016' )
Saludos