PDA

Ver la Versión Completa : Parsing Error en un Stored Procedure


FGarcia
26-02-2015, 00:45:35
Pues sigo tratando de aprender firebird :(

Es correcta mi declaracion de este Stored procedure?

create or alter procedure CUENTATOTAL_3X_1 (
P_DT_FINAL timestamp not null,
P_DT_INICIO timestamp not null)
returns (
P_TOTAL_DIA_3X_1 float,
P_CUENTA_DIA_3X_1 integer)
as
begin
/* Procedure Text */
SELECT COUNT(*) AS p_cuenta_dia_3x_1,
SUM (Peso) AS p_total_dia_3x_1
FROM Datos WHERE ((horafecha BETWEEN : p_dt_inicio AND : p_dt_final)
AND (Equipo = 6)
OR (Equipo = 7)
OR (Equipo = 8))
suspend;
end

Al intentar compilar me manda el error

"Parsing Error"

Ya revise la guia de faq's de firebird y me dice que IBExpert es tan "inteligente" que trata de hacer un "parsing" aun antes de tener acceso a Firebird. ¿Entonces que sigue? Tal vez estoy enfocando mal la creacion del SP

Win7 64 bits, Delphi XE2, Firebird 2.5.3.26778

Gracias por su tiempo!!

ecfisa
26-02-2015, 06:38:40
Hola Fidel.

Según entiendo deseas que devuelva en P_TOTAL_3X_1 la cantidad de filas y en P_CUENTA_3X1 la sumatoria de la columna PESO.

Si no me equivoqué, creo que deberías hacer algo similar a esto:

SET TERM ^ ;

CREATE OR ALTER PROCEDURE CUENTATOTAL_3X_1 (
P_DT_INICIO TIMESTAMP NOT NULL,
P_DT_FINAL TIMESTAMP NOT NULL
)
RETURNS (
P_TOTAL_3X_1 INTEGER,
P_CUENTA_3X_1 TYPE OF COLUMN DATOS.PESO
)
AS
BEGIN
FOR SELECT
COUNT(*),
SUM(PESO)
FROM DATOS
WHERE (FECHA >= :P_DT_INICIO AND FECHA <= :P_DT_FINAL)
/* resto de la condición ... */
INTO
P_TOTAL_3X_1,
P_CUENTA_3X_1
DO
SUSPEND;
END^

SET TERM ; ^


Saludos :)

Nota: Para no andar sacando la lengua (costumbre muy fea :D) podes usar las etiquetas noparse, Ej.: :p_dt_inicio

FGarcia
26-02-2015, 20:02:30
Ciertamente estas en lo correcto de cual es el proposito del SP. Como dije el enfoque de la creacion del procedure lo tenia mal.

Dejame probar que todo funcione ok y si no funciona te estare dando mas "molestias" :D:p