Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#7

AW: SQL: Umsatz je Jahr ohne Lücken ermitteln

  Alt 26. Feb 2018, 13:55
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)
;
  Mit Zitat antworten Zitat