![]() |
Re: Summe mit Stored Procedure
Robert, die Wege sind manchmal unergründlich. Das mußt Du noch lernen :lol: Schumi gewinnt angeblich nur deshalb, weil er die nächste Schikane schon im Kopf hat und die anderen erst dann, wenn sie sie sehen. 8) Ähmm ja, und so mache ich das halt auch. :mrgreen:
Orientiere Dich bei Antworten eventuell auch am Titel des Threads. Der Spezialfall scheint gelöst (weil noch nicht getestet) , aber die im Kontext aufgetauchte Frage noch nicht. |
Re: Summe mit Stored Procedure
Zitat:
Auch wenn Hansa explizit nach einer Lösung in einer SP gefragt hat, bezweifle ich immer noch den Sinn einer SP (vor allem aus Performance-Gründen!!!). Ich glaube kaum, dass durch die SP noch ein vernünftiger Query-Plan erstellt werden kann -> die Zugriffe werden also nicht mehr optimal ablaufen. |
Re: Summe mit Stored Procedure
Ja, genau so ist es ! Der Kleinkram hier ist wohl mit den AS zu erledigen. Aber an die Summe (so oder so) komme ich nicht ran. 8)
|
Re: Summe mit Stored Procedure
Eins von beiden würde auch bei dir laufen:
Delphi-Quellcode:
Edit1+2: Tippfehler...
With ADOQuery Do
Begin SQL.Text := 'SELECT SUM(Feld1) AS Summe1' + #10 + ' ,SUM(Feld2) AS Summe2' + #10 + ' ,SUM(Feld3) AS Summe3' + #10 + ' ,SUM(Feld1) + SUM(Feld2) + SUM(Feld3) AS SummeGesamt' + #10 + 'FROM Tabelle'; Open; With IrgendeineListBox.Items Do While not Eof Do Begin Add(FieldbyName('Summe1').AsString); Next; End; //... End; With OracleQuery Do Begin SQL.Text := 'SELECT SUM(Feld1) AS Summe1' + #10 + ' ,SUM(Feld2) AS Summe2' + #10 + ' ,SUM(Feld3) AS Summe3' + #10 + ' ,SUM(Feld1) + SUM(Feld2) + SUM(Feld3) AS SummeGesamt' + #10 + 'FROM Tabelle'; Execute; With IrgendeineListBox.Items Do While not Eof Do Begin Add(FieldAsString('Summe1')); Next; End; End; |
Re: Summe mit Stored Procedure
Guten Morgen,
Zitat:
1. Eine SP bearbeitet die Daten direkt auf dem Server. Wenn wir von einem "Normalzustand" ausgehen, dass ein Server in einer Firma immer die größte Maschine ist (viel Speicher, schnelle HDD,....) dann wird dort die Ausführung schneller ablaufen als im Programmcode auf dem Client. 2. Es werden nur noch die Daten übers Netz gejagt, die der Client wirklich anfordert und nicht mehr die große Datenmenge, die er bracuht um das Ergebnis zu erhalten (ich stimme zu, dass dieser Punkt bei dem gefragten SQL-Statement nicht wirklich zieht). 3. Wenn Berechnungen usw. auf den SQL-Server ausgelagert werden, ist eine evtl. notwendige Fehlerbehebung mit einem einfachen SQL-Statement möglich. Es muss nicht mehr das Client-Programm gepacht werden (Neucompilierung, verteilen des Codes im Netzwerk), sondern die Business-Rules können mit einer DDL-SQL einfach geändert bzw. gepatcht werden und das im laufenden Betrieb. 4. Der wichtigste Punkt: EIne SP wird sozusagen "compiliert" in der Datenbank abgespeichert, so dass verschiedene Schritte, die das DMS beim Ausführen einer "normalen" SQL machen muss, einfach nicht mehr notwendig sind. Dadurch ergibt sich eine Zeitersparnis! Es gibt also einige Punkte, die den Einsatz einer SP sinnvoll machen. Grüße Lemmy P.S.: Welche Frage ist denn im Kontext dieses Threads aufgetacuht??? *) Keine Regel ohne Ausnahme! |
Re: Summe mit Stored Procedure
:shock:
Hast du dir das genau überlegt? Wenn ich ein SELECT an den Server schicke, bekomme ich nur die Ergebnissse zurück, nicht mehr. Wenn sich das Statement zwischen zwei Aufrufen nicht ändert (solange sie zeitlich nicht zu weit auseinander liegen), muss es nicht neu geparst werden, in Oracle wird es auch kein 2. Mal komplett ausgeführt, es werden nur die Werte im Cache neu gefiltert. Das Ganze setzt natürlich voraus, dass IB/FB über einen vernünftigen Optimizer verfügt, der den Query-Plan erstellt und einem entsprechenden Cache-System. (ich habe keinen Plan von IB/FB :roll: ) Wenn Hansa die Daten nur in dieser Form haben will, wäre eine SP sinnlos & langsamer. Will er noch mehr mit den Daten anstellen, bevor er sie im Client benutzt, wäre natürliche eine SP angebracht. |
Re: Summe mit Stored Procedure
Hi,
Zitat:
Zitat:
Zitat:
Zitat:
Grüße Lemmy |
Re: Summe mit Stored Procedure
folgendes aus dem Kopf, also nicht getestet.
Die Syntax könnte dann z.B. in etwa so sein (MSSQL - IB kein Plan):
SQL-Code:
in Delphi:
DECLARE PROCEDURE SUMMIERE
( S0 int OUTPUT , S1 int OUTPUT , S2 int OUTPUT , S3 int OUTPUT ) AS BEGIN SELECT S0 = SUM(Feld1) , S1 = SUM(Feld2) , S2 = SUM(Feld3) , S3 = SUM(Feld1)+SUM(Feld2)+SUM(Feld3) FROM Tabelle END
Delphi-Quellcode:
Zum philosophischen Streit:
function GetSummenFromDb(var Sum1: Integer;
var Sum2: Integer; var Sum3: Integer; var Sum4: Integer; Con : TADOConnection):Boolean; var arySumme := TADOQuery; i : Integer; begin Result := True; arySumme := TADOQuery.Create(nil); with arySumme do try Connection := Con; SQL.Add('EXECUTE SUMMIERE :S0,:S1,:S2,:S3'); for i := 0 to 3 do begin Parameters.Add; Parameters[i].Name := 'S'+; Parameters[i].DataType := ftInteger; Parameters[i].Size := -1; Parameters[i].Value := NULL; end; try arySumme.ExecSQL; S0 := Parameters[0].Value; S1 := Parameters[1].Value; S2 := Parameters[2].Value; S3 := Parameters[3].Value; except Result := False; end; finally FreeAndNil(arySumme); end; end; ich habe in meinem aktuellen Projekt auch SP's benutzt, wo es nur ging (selbst für einfache Abfragen), da ich in Delphi dann nur 'Execute Procedurename Parameterliste' als SQL-Text zu verwenden brauche. Ändert sich was an der DB-Struktur, brauche ich diese Änderungen nur in den SP's auf dem DB-Server nachzuvollziehen, und muß den Client-Code nicht mehr anfassen - gerade bei komplexen DB-Modellen ein Segen. Da MSSQL auch Query's aus SP's cached, denke ich, dass es kaum Performanceunterschiede geben sollte. Gruß |
Re: Summe mit Stored Procedure
Das Thema ist immer noch nicht ganz geschlossen. :shock: Ich brauche eine Stored Procedure für folgenden Zweck : Umsatz 0%, 7%, 16% sind in einer Tabelle gespeichert. Ich brauche an diversen Stellen die Summe. Jetzt weiß ich nicht mehr, wie ich an das Ergebnis komme.
Die stored Procedure funktioniert. In IBexpert wird alles richtig angezeigt. In Delphi komme ich aber nicht weiter. Wie komme ich da an das errechnete Ergebnis wieder dran ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:50 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-2025 by Thomas Breitkreuz