View Full Version : Chain Key Wildcard
Hallo!
Ich habe eine Frage bzgl. eines Chains.
Als Beispiel: chain(key1:key2:key3:key4)
Jetzt möchte ich den Keys 1,2,4 feste werte zuordnen und bei key3 ist es mir egal was drinsteht (-> wäre sozusagen ein *all - oder wie man es nennen will)
Ist soetwas möglich? Besten Dank im voraus!
Da gibt es mehrere Möglichkeiten:
1. Du legst eine neue logische Datei an mit den Keys 1,2,4 und evtl. 3 und verwendest diese.
2. Du setzt mit den Keys 1,2 auf (SETLL) und liest (READE) in einer Schleife solange bis Schlüssel 4 dem fixen Wert entspricht.
3. Du verwendest embedded SQL:
Exec SQL Select * into :DSRecord
From File
Where Key1 = 'X' and Key2 = 'Y' and Key4 = 'Z'
Fetch First Row Only;
Birgitta
Aus Performancegründen empfehle ich Methode 1 (LF/Index), dabei ist es egal ob du CHAIN oder SQL verwendest.
bei key3 ist es mir egal was drinsteht (-> wäre sozusagen ein *all - oder wie man es nennen will)
Schüttel...
... was soll man denn unter egal verstehen? und was ist mit den anderen Feldern? und wenn das mehrere Sätze sind, welcher soll es denn dann genau sein, oder etwa alle?
Genau das fällt dir auch bei dem vorgeschlagenen SQL Weg auf die Füsse, bei mehreren Sätzen kommt da ein Fehler zurück.
D*B,
den es bei solchem Datendseign immer graust!
Nun ja, nicht so hart.
Wenn mir Key3 in diesem Fall egal ist, bekomme ich per LF (mit Key1, Key2, Key4, Key3) halt den 1. Satz mit dem 1. Schlüssel aus Key3 und kann dann ggf. per READE weiterlesen.
Beim SQL kann ich da noch mit "fetch first 1 rows only" einschränken, dann gibts auch da keinen Fehler, ansonsten halt einen Cursor deklarieren und mit Fetch arbeiten.
Anders mache ich es ja auch nicht, wenn ich in den berühmten Altanwendungen eine andere Sortierfolge benötige. Es gibt da durchaus PF's mit 30-50 verschiedenen LF's.
.. doch, doch, das muss auf den Punkt gebracht werden. Hier gibt es nämlich einen wesentlichen Unterschied zwischen RLA und SQL. RLA liefert den sequentiell ersten Satz der PF mit den passenden Where Kriterien zurück und SQL die Menge derjenigen, für die die WHERE Bestimmung trifft. Folge ich deinem Vorschlag, bekomme ich irgendeinen (in Worten: irgend einen!) zurück, auf den die Where Bedingung zutrifft, im schlimmsten Falle (und shit happens) bei jedem Versuch einen anderen!
Die einzige Information, die ich daraus ableiten kann ist dann, die Existenz eines Satzes mit den vorgegebenen Kriterien. Wechsel von RLA zu SQL ist eben doch ein wenig mehr als SQE und CQE und angebliche, messtechnisch nicht verifizierbare Geschwindigkeitsgewinne und andere solche Nebensächlichkeiten, sondern das hat was mit Design zu tun!
D*B
Vielen Dank für die ganzen Antworten und die lebhafte Diskussion.
Der Vorschlag mit den LFs hat mir sehr weitergeholfen und das Problem gelöst.