Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Parsing Error en un Stored Procedure (https://www.clubdelphi.com/foros/showthread.php?t=87792)

FGarcia 26-02-2015 00:45:35

Parsing Error en un Stored Procedure
 
Pues sigo tratando de aprender firebird :(

Es correcta mi declaracion de este Stored procedure?

Código SQL [-]
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

Cita:

"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:
Código SQL [-]
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.: [noparse]:p[/noparse]_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


La franja horaria es GMT +2. Ahora son las 17:00:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi