Código SQL:
Ver original
CREATE TABLE RECIBO ( FECHA_ENTR DATE, SEC_CLIENTE INTEGER, SEC_RECIBO INTEGER, PRIMARY KEY (SEC_RECIBO), FOREIGN KEY(SEC_CLIENTE) REFERENCES CLIENTE(SEC_CLIENTE) ); CREATE TABLE LINEA_DE_RECIBO (PRECIO NUMERIC, CANTIDAD INTEGER, SEC_LINEA_DE_RECIBO INTEGER, SEC_RECIBO INTEGER, SEC_PRODUCTO INTEGER, PRIMARY KEY (SEC_LINEA_DE_RECIBO), FOREIGN KEY(SEC_RECIBO) REFERENCES RECIBO(SEC_RECIBO), FOREIGN KEY (SEC_PRODUCTO) REFERENCES PRODUCTO(SEC_PRODUCTO) );
En un primer momento había pensado en esta función:
Código SQL:
Ver original
CREATE OR REPLACE FUNCTION ingreso_mensual(fecha DATE) RETURN NUMERIC IS res NUMERIC; secuencia INTEGER; BEGIN SELECT SEC_RECIBO INTO secuencia FROM RECIBO WHERE EXTRACT(MONTH FROM recibo.FECHA_ENTR)=EXTRACT(MONTH FROM fecha) AND EXTRACT(YEAR FROM recibo.FECHA_ENTR)=EXTRACT(YEAR FROM fecha); SELECT SUM(PRECIO) INTO res FROM LINEA_DE_RECIBO WHERE LINEA_DE_RECIBO.SEC_RECIBO=secuencia; IF(res IS NULL ) THEN res:=0; END IF; RETURN res; END ingreso_mensual; /
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.