AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Optimierung einer SQL-Abfrage

Optimierung einer SQL-Abfrage

Ein Thema von barnti · begonnen am 9. Okt 2008 · letzter Beitrag vom 10. Okt 2008
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#1

Optimierung einer SQL-Abfrage

  Alt 9. Okt 2008, 13:30
Datenbank: Oracle • Version: 10g • Zugriff über: plsql
Hallo Gemeinde,

ich habe heute mal wieder eine Frage zum Thema Datenbanken. Folgende Problemstellung:

ich habe eine 11-stellige Nummer, die ich mit Einträgen aus einer Tabelle vergleichen möchte. Dabei möchte ich nicht nur die aktuelle Nummer gegen die Tabelle testen sondern auch verkürzte Bestandteile.

z.B:

1. Test: ist die Nummer 08154711059 in Tabelle A vorhanden? Wenn ja, Suche abbrechen, wenn nein

2. Test: ist die Nummer 0815471105 in Tabelle A vorhanden? Wenn ja, Suche abbrechen, wenn nein suche nächste verkürzte Nummer(bis Länge(Nummer) <= 4)


Bisher iteriere ich in einer Schleife über die zu suchenden Nummer und übergebe diese einem Cursor, der die Abfrage ausführt. Ich hätte nun gern gewusst, wie ich das optimieren kann?

Hat jemand eine Idee?
Gruß,

Barnti
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.167 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Optimierung einer SQL-Abfrage

  Alt 9. Okt 2008, 13:32
Wie wäre es mit IN?

SELECT * FROM <Tabelle> where Suchfeld in [Wert1, Wert2, ...];
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.532 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Optimierung einer SQL-Abfrage

  Alt 9. Okt 2008, 13:37
Dann erhält man aber u.U. mehrere Datensätze, sonst könnte man auch gleich auf die Minimallänge kürzen und mit like suchen.

[edit] Um 1337 gepostet, ob das was zu sagen hat? [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Optimierung einer SQL-Abfrage

  Alt 9. Okt 2008, 13:38
Hallo Bernhard,

Danke für die schnelle Antwort!

Daran hatte ich auch schon gedacht. Aber wie übergebe ich dann die Werte an das Select-Statement? Es kann auch vorkommen, dass eine Nummer mal kürzer ist, so dass ich da keine feste Variablenzahl nehmen kann. Kann ich die Werte irgendwie in ein Array schreiben und dann mit WHERE IN vergleichen? Kannst Du das evtl. etwas genauer beschreiben?
Gruß,

Barnti
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Optimierung einer SQL-Abfrage

  Alt 9. Okt 2008, 13:39
Hi,

Zitat von DeddyH:
Dann erhält man aber u.U. mehrere Datensätze, sonst könnte man auch gleich auf die Minimallänge kürzen und mit like suchen.
Like Vergleich geht leider nicht. Ich will ja nicht jede beliebige Nummer finden, sondern immer die aktuell zu suchende.
Gruß,

Barnti
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.532 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Optimierung einer SQL-Abfrage

  Alt 9. Okt 2008, 13:42
Das Problem hast Du bei der Suche mit IN aber auch, das war ja meine Aussage oben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Optimierung einer SQL-Abfrage

  Alt 9. Okt 2008, 13:46
Hallo,

Zitat von DeddyH:
Das Problem hast Du bei der Suche mit IN aber auch, das war ja meine Aussage oben.
Ich denke, das ist so nicht richtig. Wenn ich einzelne Werte mit WHERE IN vergleiche bekomme ich auch nur diskrete Treffer Für diese Werte. Will heißen:

Wert1: 08154711
Wert2: 0815471
Wert3: 081547

Dann bekomme ich nur Treffer, wenn Wert1 oder Wert2 oder Wert3 in der TAbelle enthalten ist (kein exor wohlgemerkt).
Gruß,

Barnti
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.532 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Optimierung einer SQL-Abfrage

  Alt 9. Okt 2008, 13:48
Sry, dann habe ich die Aufgabenstellung falsch verstanden.

[edit] Soll der SQL-String in Delphi generiert werden? [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.532 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Optimierung einer SQL-Abfrage

  Alt 9. Okt 2008, 14:03
Hab mal was gebastelt:
Delphi-Quellcode:
function SeekSQL(const sNumber: string; MinLength: integer = 1): string;
var i: integer;
    sl: TStringList;
begin
  Result := '';
  sl := TStringList.Create;
  try
    for i := Length(sNumber) downto MinLength do
      sl.Add(QuotedStr(Copy(sNumber,1,i)));
    Result := sl.CommaText;
  finally
    sl.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
const sSQL = 'SELECT * FROM Tabelle WHERE Suchfeld IN (%s)';
begin
  ShowMessage(Format(sSQL,[SeekSQL('08154711059',4)]));
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Optimierung einer SQL-Abfrage

  Alt 9. Okt 2008, 14:12
Hi-ho,

ja so in der Art wäre fein. Ich habe nur noch keine Möglichkeit gefunden, das in Pl/Sql zu implementieren. Vararray geht als Typ im Statement nicht(Cursor).
Gruß,

Barnti
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz