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)
-   -   Problemas en procedimiento almacenado con DATEDIFF (https://www.clubdelphi.com/foros/showthread.php?t=95518)

tiqui_loquito 05-01-2022 03:30:50

Problemas en procedimiento almacenado con DATEDIFF
 
Cuando realizo esta consulta en firebird:

Código SQL [-]
SELECT
   DATEDIFF(DAY FROM CURRENT_DATE TO CAST('1-1-2000' AS DATE))
FROM
   RDB$DATABASE

Se ejecuta muy bien; pero si deseo hacerlo dentro de un procedimiento almacenado, entonces me sale un error

Código SQL [-]
CREATE PROCEDURE EDAD_DIAS_Y_FECHA_TSH_NEONATAL
AS
BEGIN
SELECT
   DATEDIFF(DAY FROM CURRENT_DATE TO CAST('1-1-2000' AS DATE))
FROM
   RDB$DATABASE

END

El error es: Precompiler Error: Syntax error - DAY.

La verdad no se cual sea el error.

Agradezco su colaboración

manelb 05-01-2022 08:42:18

Buenos días...

Con este cambio parece que funciona sin problemas.

Yo tengo una v2.1

Código SQL [-]
SET TERM ^ ;

CREATE OR ALTER PROCEDURE EDAD_DIAS_Y_FECHA_TSH_NEONATAL 
returns (
    dias integer)
as
BEGIN

SELECT
   DATEDIFF(DAY FROM CURRENT_DATE TO CAST('1-1-2000' AS DATE))
FROM
   RDB$DATABASE into :dias;

suspend;

END^

Saludos

ElKurgan 05-01-2022 08:57:14

Gracias por compartir la solución

Saludos

tiqui_loquito 05-01-2022 18:19:06

Cita:

Empezado por manelb (Mensaje 544808)
Buenos días...

Con este cambio parece que funciona sin problemas.

Yo tengo una v2.1

Código SQL [-]
SET TERM ^ ;

CREATE OR ALTER PROCEDURE EDAD_DIAS_Y_FECHA_TSH_NEONATAL 
returns (
    dias integer)
as
BEGIN

SELECT
   DATEDIFF(DAY FROM CURRENT_DATE TO CAST('1-1-2000' AS DATE))
FROM
   RDB$DATABASE into :dias;

suspend;

END^

Saludos

Manelb gracias por la respuesta, pero aún se me presenta el problema: Precompiler Error: Syntax error - DAY.

Casimiro Notevi 05-01-2022 18:45:17

No tiene lógica ese error.
Copia y pega aquí el texto completo del mensaje de error.
¿Qué versión de firebird es?
¿Qué 'dialect' estás usando en la BD?

tiqui_loquito 05-01-2022 21:40:31

1 Archivos Adjunto(s)
Cita:

Empezado por Casimiro Notevi (Mensaje 544822)
No tiene lógica ese error.
Copia y pega aquí el texto completo del mensaje de error.
¿Qué versión de firebird es?
¿Qué 'dialect' estás usando en la BD?

Si lanzo esta consulta:
Código SQL [-]
           SELECT FIRST(1) TBL_NORMA_4505.FECHA_TSH_NEONATAL,cast(DATEDIFF(DAY, CAST(fecha_nacimiento AS DATE),CAST(FECHA_TSH_NEONATAL AS DATE))AS INTEGER) EDADDIAS
           FROM TBL_NORMA_4505
           WHERE (TBL_NORMA_4505.FECHA_TSH_NEONATAL <> '1845-01-01') AND (TBL_NORMA_4505.FECHA_TSH_NEONATAL <> '1800-01-01')
           AND TBL_NORMA_4505.FECHA_REGISTRO BETWEEN :FECHA_INICIAL AND :FECHA_FINAL
           AND TBL_NORMA_4505.ID_PACIENTE=:ID_PACIENTE
           AND cast(DATEDIFF(DAY, CAST(FECHA_NACIMIENTO AS DATE),CAST(FECHA_TSH_NEONATAL AS DATE))AS INTEGER) BETWEEN 0 AND 3
           ORDER BY TBL_NORMA_4505.ID_NORMA_4505 DESC

Como resultado me trae:
FECHA_TSH_NEONATAL EDADDIAS
31/01/2020 3


Hasta ahí todo bien. Pero apenas agrego esa consulta en un procedimiento almacenado el error que me sale es exactamente: Precompiler Error: Syntax error - DAY.


Uso firebird 2.5

Dialect
MON$SQL_DIALECT
3

Casimiro Notevi 05-01-2022 22:16:59

¿Eso es el IBExpert?

tiqui_loquito 05-01-2022 22:24:18

Cita:

Empezado por Casimiro Notevi (Mensaje 544826)
¿Eso es el IBExpert?

SQL Manager 2005 for Interbase and Firebird

tiqui_loquito 05-01-2022 23:49:42

Como no encontré el posible error, lo que hice fue lo siguiente

Código SQL [-]
           SELECT FIRST(1) TBL_NORMA_4505.FECHA_TSH_NEONATAL,
           (TBL_NORMA_4505.FECHA_TSH_NEONATAL-TBL_NORMA_4505.fecha_nacimiento) as V_VALOR
           FROM TBL_NORMA_4505
           WHERE (TBL_NORMA_4505.FECHA_TSH_NEONATAL <> '1845-01-01') AND (TBL_NORMA_4505.FECHA_TSH_NEONATAL <> '1800-01-01')
           AND TBL_NORMA_4505.FECHA_REGISTRO BETWEEN :FECHA_INICIAL AND :FECHA_FINAL
           AND TBL_NORMA_4505.ID_PACIENTE=:ID_PACIENTE
           AND (TBL_NORMA_4505.FECHA_TSH_NEONATAL-TBL_NORMA_4505.fecha_nacimiento) BETWEEN 0 AND 3
           ORDER BY TBL_NORMA_4505.ID_NORMA_4505 DESC

Código SQL [-]
 (TBL_NORMA_4505.FECHA_TSH_NEONATAL-TBL_NORMA_4505.fecha_nacimiento)

Con esa línea pude hacer lo que quería

Si logro encontrar la respuesta a lo otros se las dejaré por aquí

manelb 07-01-2022 08:15:30

Como te decía Casimiro, es muy raro ese error...

A mi se me olvidó comentar que también trabajo con IBExpert.

¿A ver si el problema va a ser del SQL Manager?

Saludos


La franja horaria es GMT +2. Ahora son las 12:45:54.

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