Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi if Abfragen in stored Procedure (https://www.delphipraxis.net/19089-if-abfragen-stored-procedure.html)

Nightfly 29. Mär 2004 11:14


if Abfragen in stored Procedure
 
Also,es geht um folg. Prozedur, die if Bedingung bekomm ich einfach nich zum laufen :(

SQL-Code:
CREATE PROCEDURE AUSWERTUNG (
    STELLE CHAR(9),
    JAHR INTEGER)
RETURNS (
    BEREICH INTEGER,
    BEZ CHAR(32),
    JAN FLOAT,
    FEB FLOAT,
    MAR FLOAT,
    APR FLOAT,
    MAI FLOAT,
    JUN FLOAT,
    JUL FLOAT,
    AUG FLOAT,
    SEP FLOAT,
    OKT FLOAT,
    NOV FLOAT,
    DEZ FLOAT)
AS
begin
  for select ID,BEZ from MAIN B where B.STELLE = :STELLE
  into :BEREICH, :BEZ do
  begin
    if (select count(*) from vorgabe where ID = :bereich ) = 0 /* Fehler,k.a. warum. es soll halt folg. code ausgeführt werden,wenn es zur variable bereich keinen passenden datensatz in der tabelle vorgabe gibt) */
      begin
      select sum(R_ANZ * R_EPREIS) from RECHNUNG R
      where (R.bereich = :BEREICH) and (R.stelle = :Stelle) and (EXTRACT(YEAR from R.R_Datum) = :Jahr) and (EXTRACT(MONTH from R.R_Datum)=1)
      into :JAN;
      select sum(R_ANZ * R_EPREIS) from RECHNUNG R
      where (R.bereich = :BEREICH) and (R.stelle = :Stelle) and (EXTRACT(YEAR from R.R_Datum) = :Jahr) and (EXTRACT(MONTH from R.R_Datum)=2)
      into :FEB;
      select sum(R_ANZ * R_EPREIS) from RECHNUNG R
      where (R.bereich = :BEREICH) and (R.stelle = :Stelle) and (EXTRACT(YEAR from R.R_Datum) = :Jahr) and (EXTRACT(MONTH from R.R_Datum)=3)
      into :MAR;
      select sum(R_ANZ * R_EPREIS) from RECHNUNG R
      where (R.bereich = :BEREICH) and (R.stelle = :Stelle) and (EXTRACT(YEAR from R.R_Datum) = :Jahr) and (EXTRACT(MONTH from R.R_Datum)=4)
      into :APR;
      select sum(R_ANZ * R_EPREIS) from RECHNUNG R
      where (R.bereich = :BEREICH) and (R.stelle = :Stelle) and (EXTRACT(YEAR from R.R_Datum) = :Jahr) and (EXTRACT(MONTH from R.R_Datum)=5)
      into :MAI;
      select sum(R_ANZ * R_EPREIS) from RECHNUNG R
      where (R.bereich = :BEREICH) and (R.stelle = :Stelle) and (EXTRACT(YEAR from R.R_Datum) = :Jahr) and (EXTRACT(MONTH from R.R_Datum)=6)
      into :JUN;
      select sum(R_ANZ * R_EPREIS) from RECHNUNG R
      where (R.bereich = :BEREICH) and (R.stelle = :Stelle) and (EXTRACT(YEAR from R.R_Datum) = :Jahr) and (EXTRACT(MONTH from R.R_Datum)=7)
      into :JUL;
      select sum(R_ANZ * R_EPREIS) from RECHNUNG R
      where (R.bereich = :BEREICH) and (R.stelle = :Stelle) and (EXTRACT(YEAR from R.R_Datum) = :Jahr) and (EXTRACT(MONTH from R.R_Datum)=8)
      into :AUG;
      select sum(R_ANZ * R_EPREIS) from RECHNUNG R
      where (R.bereich = :BEREICH) and (R.stelle = :Stelle) and (EXTRACT(YEAR from R.R_Datum) = :Jahr) and (EXTRACT(MONTH from R.R_Datum)=9)
      into :SEP;
      select sum(R_ANZ * R_EPREIS) from RECHNUNG R
      where (R.bereich = :BEREICH) and (R.stelle = :Stelle) and (EXTRACT(YEAR from R.R_Datum) = :Jahr) and (EXTRACT(MONTH from R.R_Datum)=10)
      into :OKT;
      select sum(R_ANZ * R_EPREIS) from RECHNUNG R
      where (R.bereich = :BEREICH) and (R.stelle = :Stelle) and (EXTRACT(YEAR from R.R_Datum) = :Jahr) and (EXTRACT(MONTH from R.R_Datum)=11)
      into :NOV;
      select sum(R_ANZ * R_EPREIS) from RECHNUNG R
      where (R.bereich = :BEREICH) and (R.stelle = :Stelle) and (EXTRACT(YEAR from R.R_Datum) = :Jahr) and (EXTRACT(MONTH from R.R_Datum)=12)
      into :DEZ;
      end;
      else
      begin
      /* So,und hier sollen dann, WENN die variable Bereich einen Datensatz in Vorgabe hat,alle Zeilen, die zu dem aktuellen bereich gehören,aufsummiert werden */
      end;
     suspend;
  end
end
Kann mir da vielleicht jemand weiterhelfen? Was genau passieren soll steht im Code in den kommentaren.

Robert_G 29. Mär 2004 11:36

Re: if Abfragen in stored Procedure
 
Was für eine DB ist es denn?
Außerdem glaube ich kaum das diese Syntax stimmt:

SQL-Code:
SELECT ...
FROM  ...
WHERE ...
INTO  ...
So wäre es richtig.

SQL-Code:
SELECT ...
INTO  ...
FROM  ...
WHERE ...
Das kann sich aber von DB zu DB unterscheiden...

Nightfly 29. Mär 2004 11:41

Re: if Abfragen in stored Procedure
 
Es handelt sich um eine Firebird Datenbank. Die Syntax stimmt, denn wenn ich den if else block rausnehme funktioniert dir Prozedur Tadellos.

Ich benötige nun aber diese Abfrage,um Summenzeilen von gewöhnlichen unterscheiden zu können.

Lemmy 29. Mär 2004 12:25

Re: if Abfragen in stored Procedure
 
Hi NightFly,

versuch mal die Select Count Abfrage aus der If rauszunehmem

SQL-Code:
    DEZ FLOAT)
AS

DECLARE VARIABLE Anzahl INTEGER;

begin
  for select ID,BEZ from MAIN B where B.STELLE = :STELLE
  into :BEREICH, :BEZ do
  begin
    select count(*) from vorgabe where ID = :bereich into :Anzahl;
    if (Anzahl= 0) then
      begin
Habs jetzt gerade gesehen:
1. die Bedingung MUSS in einer Klammer stehen (solltest Du vielleicht erst mal testen ob das schon reicht).
2. Ein THEN sollte eigentlich auch irgendwann mal kommen ;-)

Grüße
Lemmy

Nightfly 29. Mär 2004 13:15

Re: if Abfragen in stored Procedure
 
gute Idee,hat geklappt,danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz