![]() |
Datenbank: Oracle • Version: 10g • Zugriff über: plsql
Optimierung einer SQL-Abfrage
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? |
Re: Optimierung einer SQL-Abfrage
Wie wäre es mit IN?
SQL-Code:
SELECT * FROM <Tabelle> where Suchfeld in [Wert1, Wert2, ...];
|
Re: Optimierung einer SQL-Abfrage
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? :mrgreen: [/edit] |
Re: Optimierung einer SQL-Abfrage
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? |
Re: Optimierung einer SQL-Abfrage
Hi,
Zitat:
|
Re: Optimierung einer SQL-Abfrage
Das Problem hast Du bei der Suche mit IN aber auch, das war ja meine Aussage oben.
|
Re: Optimierung einer SQL-Abfrage
Hallo,
Zitat:
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). |
Re: Optimierung einer SQL-Abfrage
Sry, dann habe ich die Aufgabenstellung falsch verstanden.
[edit] Soll der SQL-String in Delphi generiert werden? [/edit] |
Re: Optimierung einer SQL-Abfrage
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; |
Re: Optimierung einer SQL-Abfrage
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). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 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