2

Ich benutze Firebird 2.5 und stieß auf ein Problem, das ich selbst nicht lösen kann.Wie benutze ich PLAN mit UPDATE oder INSERT IN

Es gibt eine Aussage mit UPDATE OR INSERT INTO. Ich würde gerne einen spezifischen Ausführungsplan verwenden. Aber - egal, wo ich lege die PLAN - bekomme ich folgende Fehlermeldung (Zeilennummer ändert sich mit PLAN ‚Position):

Ungültige Token.
Dynamischer SQL-Fehler.
SQL-Fehlercode = -104.
Token unbekannt - Zeile 2, Spalte 5.
Plan.

Ich habe nichts über die Verwendung von PLAN mit UPDATE OR INSERT INTO im corresponding documentation finden.

Aspekte meiner Frage: Ist es sogar möglich, sie zusammen zu verwenden? Funktioniert das oder soll es in einer späteren Version von Firebird funktionieren? Gibt es einen offensichtlichen Grund, warum es nicht funktioniert, dass ich nicht gesehen habe? Welche Alternativen gibt es, um das zu umgehen?

+0

Warum möchten Sie einen bestimmten Ausführungsplan verwenden? –

+0

@EstebanP. Es gibt einen entsprechenden Index, der mit der Übereinstimmungsklausel der Anweisung übereinstimmt. Ich möchte, dass Firebird es unabhängig von der aktuellen Indexselektivität verwendet, da dies möglicherweise veraltet ist und ich * weiß *, dass es der beste Index für diese Aussage ist. Zusätzlich möchte ich Abhängigkeiten für Indizes haben. –

+0

Eigentlich verstehe ich, dass es keine Notwendigkeit gibt, einen 'Plan' zu verwenden. Ich will nur wissen, ob und wenn nicht - warum es nicht möglich ist - es in diesem Fall zu benutzen. –

Antwort

1

Dies ist in Firebird 2.5 nicht möglich (und in 3.0 auch nicht möglich). Mit Blick auf die parser definition wird die PLAN Klausel nur unterstützt auf:

Für eine merge Aussage sollte es möglich sein, einen Plan für die Quelle angeben (wenn es sich um eine Select-Abfrage handelt), aber nicht um die Zusammenführung selbst. Die Planklausel ist nicht definiert für update or insert (zum Beispiel ist es nicht für insert).

Soweit ich weiß, ist nichts geplant, dies zu Firebird 4 hinzuzufügen. Sie sollten überlegen, ein Verbesserungsticket in den Tracker hinzuzufügen, aber ich weiß nicht, ob das überhaupt möglich ist.

Verwandte Themen