Entwickler-Ecke
Datenbanken - IB: Stored Procedure zur Berechnung
UGrohne - Di 18.03.03 19:47
Titel: IB: Stored Procedure zur Berechnung
Moin,
ich bin jetzt dazu übergegangen eine Stored Procedure für die Berechnung der Gesamtkosten eines Auftrags zu verwenden. Folgendermaßen sieht sie aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| CREATE PROCEDURE auftragskosten(anr integer) RETURNS (auftragssumme integer) AS DECLARE VARIABLE summe integer; DECLARE VARIABLE preis integer; DECLARE VARIABLE menge integer; DECLARE VARIABLE anrtemp integer; BEGIN summe=0; FOR SELECT art.e_preis, pos.menge, pos.anr FROM positionen pos LEFT OUTER JOIN artikel art ON pos.artikel=art.artnr WHERE (pos.anr=:anr) INTO :preis, :menge, :anrtemp DO summe=summe+(preis*menge); END; :auftragssumme=:summe; END; |
Sie funktioniert, außer dass ich einen Fehler bekomm, wenn ich das oben ausführe (Listenindex ausserhalb gültigen Bereichs, oder so), aber sie ist richtig da.
Wenn ich sie jetzt aber ausführe, bekomme ich ein leeres Ergebnis zurück. Warum? Hab auch schon auftragssumme und summe ohne : gehabt, ist auch nix anderes. Wer kann mir den erlösenden Tipp geben?
Gruß
Lemmy - Mi 19.03.03 11:33
Titel: Re: IB: Stored Procedure zur Berechnung
Hi,
wie wärs mit folgendem:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| CREATE PROCEDURE auftragskosten(anr integer) RETURNS (auftragssumme integer) AS
BEGIN
FOR SELECT SUM(art.e_preis*pos.menge) FROM positionen pos LEFT OUTER JOIN artikel art ON pos.artikel=art.artnr WHERE (pos.anr=:anr) INTO :auftragssumme DO SUSPEND; END END^ |
1. Die Summe müsste jetzt auch so berechnet werden können.
2. Um Daten von der SP an die aufrufende Stelle zu übertragen wird ein SUSPEND; oder EXIT; benötigt!!!
Grüße
Lemmy
Lemmy - Mi 19.03.03 11:35
Titel: Re: IB: Stored Procedure zur Berechnung
Hi,
wie wärs mit folgendem:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| CREATE PROCEDURE auftragskosten(anr integer) RETURNS (auftragssumme integer) AS
BEGIN
FOR SELECT SUM(art.e_preis*pos.menge) FROM positionen pos LEFT OUTER JOIN artikel art ON pos.artikel=art.artnr WHERE (pos.anr=:anr) INTO :auftragssumme DO SUSPEND; END END^ |
1. Die Summe müsste jetzt auch so berechnet werden können.
2. Um Daten von der SP an die aufrufende Stelle zu übertragen wird ein SUSPEND; oder EXIT; benötigt!!!
Grüße
Lemmy
delphiDeveloper - Mi 19.03.03 12:09
Titel: Ich wuerde hier den left outer join vermeiden
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| CREATE PROCEDURE auftragskosten(anr integer) RETURNS (auftragssumme integer) AS
BEGIN
FOR SELECT SUM(art.e_preis*pos.menge) FROM positionen pos , artikel art WHERE (pos.anr=:anr) and (pos.artikel=art.artnr) INTO :auftragssumme DO SUSPEND; END END^ |
Da ein Fulljoin viel schneller ist, würde ich hier den Left Outer Join vermeiden.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!