2017-05-19 5 views
1

nach Stichwort verwenden, die ich durch Field4 in absteigender Reihenfolge durch die Datensätze gehen wollen, aber wenn ich in den Code setzen BY mybuffer.Field4 DESCENDING Ich erhalte den FehlerWie richtig in FÜR JEDEN

Nach „Field4 DESCENDING“ nicht verständlich (247) [übersetzt].

FOR EACH mybuffer 
    WHERE mybuffer.Field1 = value1 
    AND mybuffer.Field2 = value2 
    AND mybuffer.Field3 >= value3 
    BY mybuffer.Field4 DESCENDING 
    USE-INDEX myindex 
    NO-LOCK: 

    /* do something */ 
END. 

Was mache ich falsch?

+0

Wie sieht die Aussage mit Fehler aus? Klingt wie ein Syntaxfehler. – Jensd

Antwort

1

Obwohl ich nicht sicher bin, dass die Kombination von USE-INDEX und BY intelligent ist. Aber Ihr Problem ist wahrscheinlich die Reihenfolge der Optionen.

Verwendung in dieser Reihenfolge:

  • USE-INDEX
  • NO-LOCK
  • BY
1

Der Fehler ist die Platzierung des USE-INDEX "Nach Feld 4 absteigenden". Genau wie die Fehlermeldung sagt.

Die korrekte Syntax ist:

for each customer no-lock use-index cust-num 
    where sales-rep = "BBB" 
    by city: 

    display customer. 

end. 

FWIW es unwahrscheinlich ist, eine gute Idee zu sein, in einem sowohl USE-INDEX zu haben für jede Schleife und noch weniger wahrscheinlich eine gute Idee zu sein, wird die Kombination mit DURCH. Der Compiler wird wahrscheinlich einen besseren Index (oder mehrere Indizes) auswählen, wenn Sie dies zulassen.

+0

Könnten Sie bitte erklären (oder einen Link geben), warum ich nicht USE-INDEX (in Kombination mit BY) in einer FOR EACH-Schleife verwenden sollte? Gibt es eine andere Möglichkeit, eine Tabelle "rückwärts" zu durchlaufen? – user2190035

+1

Wenn Sie umgekehrte Reihenfolge benötigen, verwenden Sie das Schlüsselwort DESCENDING. Die Reihenfolge wird mit BY angegeben. Wenn diese Reihenfolge nicht mit USE-INDEX übereinstimmt, erfolgt die clientseitige Sortierung der Ergebnismenge. Wenn Sie USE-INDEX angeben, kann nur dieser einzelne Index zur Auswahl verwendet werden, während komplexe Abfragen häufig mehrere Indizes verwenden können, wenn der Compiler seinen eigenen Entscheidungen unterliegt. Der Compiler ist auch im Allgemeinen schlauer als die meisten Programmierer. Wenn Sie also nicht einen sehr soliden Beweis dafür haben, dass Sie ihn ausgetrickst haben, sollten Sie nicht in der Lage sein, USE-INDEX herumzuwerfen. –