Es ist oft sinnvoll komplexe Abfragen für die Anwendungsfälle hinter einer
DB-Prozedur oder View zu verstecken.
Damit können spätere Änderungen oder Optimierungen am
DB-Design vorgenommen werden, ohne das auch die Anwendung geändert werden muss.
Man übersieht so keine Anwendungsfälle, die eventuell anzupassen sind.
Das erleichtert insbesondere das Testen.
Ein Script für die Prozeduren:
SQL-Code:
set term ^;
create or alter procedure P_JAHRE (
VON_JAHR integer,
BIS_JAHR integer)
returns (
JAHR integer,
VON date,
BIS date)
AS
begin
jahr = von_jahr;
while (jahr <= bis_jahr) do
begin
von = cast('01.01.' || jahr as date);
bis = cast('31.12.' || jahr as date);
suspend;
jahr = jahr + 1;
end
end^
create procedure P_JAHRESUMSATZ_KUNDE (
KDNR integer,
VON_JAHR integer,
BIS_JAHR integer)
returns (
JAHR integer,
UMSATZ numeric(15,2))
as
declare variable von date;
declare variable bis date;
begin
/* Umsatzauswertung */
for select jahr, von, bis
from p_jahre (:von_jahr, :bis_jahr)
into :jahr, :von, :bis
do
begin
select sum(Brutto)
from rechnung
where (kdnr = :kdnr) and (datum between :von and :bis)
int :umsatz;
suspend;
end
end^
set term ;^
Und die Abfrage aus der Anwendung:
SQL-Code:
select * from P_JAHRESUMSATZ_KUNDE (:kdnr, :von_jahr, :bis_jahr)
;