![]() |
if Abfragen in stored Procedure
Also,es geht um folg. Prozedur, die if Bedingung bekomm ich einfach nich zum laufen :(
SQL-Code:
Kann mir da vielleicht jemand weiterhelfen? Was genau passieren soll steht im Code in den kommentaren.
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 |
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:
So wäre es richtig.
SELECT ...
FROM ... WHERE ... INTO ...
SQL-Code:
Das kann sich aber von DB zu DB unterscheiden...
SELECT ...
INTO ... FROM ... WHERE ... |
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. |
Re: if Abfragen in stored Procedure
Hi NightFly,
versuch mal die Select Count Abfrage aus der If rauszunehmem
SQL-Code:
Habs jetzt gerade gesehen:
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 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 |
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