Hallo Hansa,
versuch mal folgendes:
SQL-Code:
CREATE PROCEDURE ERMITTLE_ALLEMWSTSP (ABDATUM DATE)
RETURNS (
ID_OUT INTEGER,
MWSTSATZ_OUT INTEGER,
ABDATUM_OUT DATE,
MWSTWERT_OUT DECIMAL(15,2))
AS
begin
FOR SELECT MWSTSATZ
FROM MWST
WHERE ABDATUM <= :ABDATUM
GROUP BY MWSTSATZ /* GROUP BY statt SELECT DISTINCT verwendet, da GROUP BY indiziert arbeitet, DISTINCT nicht */
INTO :MWSTSATZ_OUT
DO /* fuer jeden bis :ABDATUM vorhandenen MWSTSATZ */
BEGIN
/* juengstes Aenderungsdatum ermitteln */
SELECT max (ABDATUM)
FROM MWST
WHERE MWSTSATZ = :MWSTSATZ_OUT
AND ABDATUM <= :ABDATUM
INTO :ABDATUM_OUT;
/* jetzt noch ID und Wert ermitteln */
SELECT ID, MWSTWERT
FROM MWST
WHERE MWSTSATZ = :MWSTSATZ_OUT
AND ABDATUM = :ABDATUM_OUT
INTO :ID_OUT, :MWSTWERT_OUT;
SUSPEND;
END
end
Du solltest aus Geschwindigkeitsgründen in der Tabelle MWST Indexe auf
- MWSTSATZ
- MWSTWERT
- ABDATUM
eingerichtet haben.
Des weiteren bin ich davon ausgegangen, dass es einen Unique über MWSTSATZ und ABDATUM gibt.
Ansonsten könnte die letzte select in der Procedure ein
multiple rows in a singelton select
hervorrufen.
Das Ganze ist runtergetippt und nicht getestet, da ich gerade keinen
DB-Server am Laufen habe.
Bei Fehlfunktion bitte nachfragen.
Hope it helps
onlinekater