Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-02-2013
davidss79 davidss79 is offline
Registrado
NULL
 
Registrado: feb 2013
Posts: 1
Poder: 0
davidss79 Va por buen camino
Cool There is an error in input of field "procedure body"

Llevo ya bastante rato que no programo en interbase, pero agarre un proyecto y como era pequeño decidí utilizar firebird,
en mi procedimiento solo necesito traer de la tabla de movimientos las entradas y las salidas, restarlas y sacar la existencia de un producto, mi procedimiento esta asi:

CREATE PROCEDURE EXISTENCIA_BODEGA
(V_ID_TIPO INT NOT NULL, V_ID_GRUPO INT NOT NULL, V_ID_PRODUCTO INT NOT NULL, V_ID_BODEGA INT NOT NULL)
RETURNS (EXISTENCIA FLOAT NOT NULL)
AS
DECLARE ENTRADAS TYPE OF FLOAT;
DECLARE SALIDAS TYPE OF FLOAT;
BEGIN
/* Procedure body */
SELECT SUM(D.CANTIDAD)
FROM FER_DETALLE_MOVIMIENTO D INNER JOIN FER_TIPO_MOVIMIENTO T ON D.ID_TIPO_MOVIMIENTO = T.ID_TIPO_MOVIMIENTO
WHERE D.ID_TIPO = :V_ID_TIPO
AND D.ID_GRUPO = :V_ID_GRUPO
AND D.ID_PRODUCTO = :V_ID_PRODUCTO
AND D.ID_BODEGA = :V_ID_BODEGA
AND T.SIGNO = '+' into :ENTRADAS;

IF ENTRADAS = NULL THEN
:ENTRADAS := 0;

SELECT SUM(D.CANTIDAD)
FROM FER_DETALLE_MOVIMIENTO D INNER JOIN FER_TIPO_MOVIMIENTO T ON D.ID_TIPO_MOVIMIENTO = T.ID_TIPO_MOVIMIENTO
WHERE D.ID_TIPO = :V_ID_TIPO
AND D.ID_GRUPO = :V_ID_GRUPO
AND D.ID_PRODUCTO = :V_ID_PRODUCTO
AND D.ID_BODEGA = :V_ID_BODEGA
AND T.SIGNO = '-' into :SALIDAS;

IF SALIDAS = NULL THEN
:SALIDAS := 0;

EXISTENCIA := :ENTRADAS - :SALIDAS;

SUSPEND;
END;

y me sale ese error al querer compilarlo.

Saludos y gracias por su ayuda.
Responder Con Cita
  #2  
Antiguo 02-02-2013
[birmain] birmain is offline
Miembro Premium
 
Registrado: feb 2005
Ubicación: Albacete - España
Posts: 49
Poder: 0
birmain Va por buen camino
A simple vista veo un error de sintaxis que se repite en cada asignación de variables
Código SQL [-]
EXISTENCIA := :ENTRADAS
debería ser: EXISTENCIA = :ENTRADAS
La asignación es el signo = y no := como en Pascal
Responder Con Cita
  #3  
Antiguo 02-02-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por davidss79 Ver Mensaje
.
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración

Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #4  
Antiguo 02-02-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Además de lo que bién te señaló birmain, noto que en la declaración de variables estas utilizando TYPE OF FLOAT, como si FLOAT se tratase de un dominio. Y también pareciera que están sobrando algunos ':'.

Intentá de este modo:
Código SQL [-]
SET TERM ^ ;

CREATE PROCEDURE PROC_TMP(V_ID_TIPO INT NOT NULL, V_ID_GRUPO INT NOT NULL,
  V_ID_PRODUCTO INT NOT NULL, V_ID_BODEGA INT NOT NULL)
RETURNS (EXISTENCIA FLOAT NOT NULL)
AS
  DECLARE ENTRADAS FLOAT;
  DECLARE SALIDAS FLOAT;
BEGIN
  SELECT SUM(D.CANTIDAD)
  FROM FER_DETALLE_MOVIMIENTO D INNER JOIN FER_TIPO_MOVIMIENTO T ON D.ID_TIPO_MOVIMIENTO = T.ID_TIPO_MOVIMIENTO
  WHERE D.ID_TIPO = :V_ID_TIPO
    AND D.ID_GRUPO = :V_ID_GRUPO
    AND D.ID_PRODUCTO = :V_ID_PRODUCTO
    AND D.ID_BODEGA = :V_ID_BODEGA
    AND T.SIGNO = '+' into :ENTRADAS;
  IF(ENTRADAS = NULL) THEN
    ENTRADAS = 0;

  SELECT SUM(D.CANTIDAD)
  FROM FER_DETALLE_MOVIMIENTO D INNER JOIN FER_TIPO_MOVIMIENTO T ON D.ID_TIPO_MOVIMIENTO = T.ID_TIPO_MOVIMIENTO
  WHERE D.ID_TIPO = :V_ID_TIPO
    AND D.ID_GRUPO = :V_ID_GRUPO
    AND D.ID_PRODUCTO = :V_ID_PRODUCTO
    AND D.ID_BODEGA = :V_ID_BODEGA
    AND T.SIGNO = '-' into :SALIDAS;
  IF (SALIDAS = NULL) THEN
    SALIDAS = 0;

  EXISTENCIA = ENTRADAS - SALIDAS;

  SUSPEND;
END^

SET TERM ; ^

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Permisos a un "procedure" o "function" snapscanes API de Windows 1 19-01-2011 00:16:46
Error "Invalid field Type" entre Delphi 2007 y Firebird 1.5 saltamirano Varios 2 24-12-2007 23:38:07
cómo puedo bajar y mover a la derecha un input type "text"? maximo_nashir HTML, Javascript y otros 9 05-09-2007 00:24:50
Traducción del mensaje "Field value required" menfis Conexión con bases de datos 1 18-02-2005 11:43:03
Solución para el error "Field ID not found" Calderin Conexión con bases de datos 5 24-11-2004 11:18:26


La franja horaria es GMT +2. Ahora son las 17:38:47.


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
Copyright 1996-2007 Club Delphi