AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SELECT via Stored Procedure
Thema durchsuchen
Ansicht
Themen-Optionen

SELECT via Stored Procedure

Ein Thema von nachti1505 · begonnen am 13. Apr 2011 · letzter Beitrag vom 14. Apr 2011
Antwort Antwort
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#1

SELECT via Stored Procedure

  Alt 13. Apr 2011, 20:50
Datenbank: Firebird • Version: 2.1 • Zugriff über: FIBPlus
Im Thread http://www.delphipraxis.net/94737-st...erationen.html empfiehlt alzaimar:
Zitat:
Wir verwenden pro (logischer) Tabelle genau eine Stored Procedure mit einem Parameter 'Action', der angibt, ob man einfügen, löschen und verändern möchte. Nach dem 'Action'-Parameter folgen dann die ganzen Parameter für die Operation.
Das ganze habe ich auch gemacht, so dass für jede logische Tabelle bei mir nun zwei SPs bestehen. Eine zum Lesen der Tabellendaten und eine zum insert/update/delete. Speziell das Lesen macht mir nun aber Sorgen. Eine typische Lese-SP sieht ja in etwa so aus:
Code:
  for select a,
             b,
             ...
             x
  from tabelle
  into :a,
       :b,
       ...
       :x
  do begin
    /* further action */
    suspend;
  end;
Der Klient besorgt sich seine Daten dann via:
Code:
select a,b,...,x from tabelle where a=5 and c=7;
Dieser Aufruf dauert bei einer Tabelle mit ca. 25000 zu lange. Was wahrscheinlich daran liegt, dass das WHERE in die SP müßte um besser zu arbeiten. So aber wird durch die SP erstmal die komplette Tabelle durchgeackert und dann erst das WHERE angewendet. Wie kann man nun den WHERE-Clause an die SP übergeben?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.875 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: SELECT via Stored Procedure

  Alt 13. Apr 2011, 20:57
Man könnte a ubd c als Parameter übergeben oder meinst du eine variablere Bedingung?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: SELECT via Stored Procedure

  Alt 13. Apr 2011, 21:18
Prinzipiell eine gute Idee... da werde ich wohl nicht drum herum kommen... hab eben mal versucht, die SP durch eine View zu ersetzen und sofort die gewohnte Performance erhalten... was gäbe es denn für ein Vorgehen für eine "variablere Bedingung"?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.875 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: SELECT via Stored Procedure

  Alt 14. Apr 2011, 05:35
1.) Where-Bedingung als string übergeben und dann Abfrage dynamisch zusammenbauen
2.) Für jedes mögliches Feld einen Parameter, null wenn FEld keine Bedingung haben soll, dann in der SP

select ... where ((:<p1> is null) or ( <Feld1> = :<p1>)) and ((:<p2> is null) or ( <Feld2> = :<p2>)) ...
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: SELECT via Stored Procedure

  Alt 14. Apr 2011, 06:17
Möglichkeit zwei habe ich schon bedacht, Möglichkeit 1 klingt interessant... werde mir das mal anschauen.... Vielen Dank dir
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.875 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: SELECT via Stored Procedure

  Alt 14. Apr 2011, 06:29
Zitat:
Möglichkeit zwei habe ich schon bedacht, Möglichkeit 1 klingt interessant...
Dann macht man aber u.U. die Performance-Vorteile einer SP zunichte.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:27 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