Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/06/2015, 05:42
Avatar de blueMuffin010
blueMuffin010
 
Fecha de Ingreso: mayo-2015
Ubicación: Sevilla
Mensajes: 19
Antigüedad: 9 años
Puntos: 0
Pregunta Problema conceptual con tablas y funciones

Buenas tardes, estoy haciendo un trabajo en el que llevo la BD de una tienda. Quiero calcular los ingresos que lleva al mes. Tengo estas dos tablas para ello:

Código SQL:
Ver original
  1. CREATE TABLE RECIBO
  2.                    (
  3.                    FECHA_ENTR DATE,
  4.                    SEC_CLIENTE INTEGER,
  5.                    SEC_RECIBO INTEGER,
  6.                    PRIMARY KEY (SEC_RECIBO),
  7.                    FOREIGN KEY(SEC_CLIENTE) REFERENCES CLIENTE(SEC_CLIENTE)
  8.                    );
  9.  
  10. CREATE TABLE LINEA_DE_RECIBO
  11.                             (PRECIO NUMERIC,
  12.                             CANTIDAD INTEGER,
  13.                             SEC_LINEA_DE_RECIBO INTEGER,
  14.                             SEC_RECIBO INTEGER,
  15.                             SEC_PRODUCTO INTEGER,
  16.                             PRIMARY KEY (SEC_LINEA_DE_RECIBO),
  17.                             FOREIGN KEY(SEC_RECIBO) REFERENCES RECIBO(SEC_RECIBO),
  18.                             FOREIGN KEY (SEC_PRODUCTO) REFERENCES PRODUCTO(SEC_PRODUCTO)
  19.                             );


En un primer momento había pensado en esta función:
Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION ingreso_mensual(fecha DATE)
  2.   RETURN NUMERIC IS res NUMERIC;
  3.   secuencia INTEGER;
  4.   BEGIN
  5.   SELECT SEC_RECIBO INTO secuencia FROM RECIBO WHERE EXTRACT(MONTH FROM recibo.FECHA_ENTR)=EXTRACT(MONTH FROM fecha) AND
  6.     EXTRACT(YEAR FROM recibo.FECHA_ENTR)=EXTRACT(YEAR FROM fecha);
  7.    
  8.     SELECT SUM(PRECIO) INTO res FROM LINEA_DE_RECIBO WHERE LINEA_DE_RECIBO.SEC_RECIBO=secuencia;
  9.    
  10.     IF(res IS NULL ) THEN res:=0;
  11.          END IF;
  12.          
  13.    RETURN res;
  14.    END ingreso_mensual;
  15. /


Dejando a un lado que no me funciona cuando lo pruebo (me da un error de "exact fetch returns more than requested number of rows") luego he caído en la cuenta de que con el primer SELECT me selecciona sólo una SEC_RECIBO y sólo me daría el precio de uno de los recibos con la fecha introducida por parámetros.

He buscado en internet a ver si había ejemplos de for para ir seleccionando todas las SEC_RECIBO pero no encuentro nada que me sirva (En realidad ni siquiera sé si se usan FOR en sql, yo es que soy más de JAVA)

En fin, no sé por dónde coger esta función. Si alguien me echara una mano se lo agradecería.

Última edición por gnzsoloyo; 21/06/2015 a las 09:55