Definieren variable und eine Abfrage ausführen mit EXECUTE BLOCK
Habe ich eine große Abfrage in der Firebird (die, die ich laufen mit FlameRobin), mit einem parameter werden alle über dem Platz, aber immer die folgende Abfrage ausführen:
SELECT * FROM customers WHERE customerid = 1234;
Möchte ich definieren 1234
als eine variable, sagen customerID
, so dass ich können Sie leicht ersetzen Sie es mit etwas anderes.
Habe ich gelernt, dass ich diese innerhalb einer EXECUTE BLOCK
.
EXECUTE BLOCK
AS
DECLARE customerID INT = 1234;
BEGIN
SELECT * FROM customers WHERE customerid = :customerID
END
Wenn von Bedeutung, die den Fehler bin ich immer Engine Message :
Dynamic SQL Error
SQL error code = -104
Unexpected end of command - line 3, column 26
InformationsquelleAutor Valentin Despa | 2013-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass FlameRobin muss wissen, Wann eine Aussage endet und die nächste Anweisung beginnt. Standardmäßig verwendet das Semikolon (
;
). Aber einEXECUTE BLOCK
ist im wesentlichen eine gespeicherte Prozedur, die nicht in der Datenbank gespeichert, so es enthält PSQL-code, der verwendet auch das Semikolon als statement-separator.Die Folge davon ist, dass man Fehler in der syntax, weil FlameRobin ist das versenden unvollständiger Anweisungen an den server (das ist: es ist das senden einer Anweisung nach jeder
;
es trifft).Müssen Sie anweisen FlameRobin, verwenden Sie eine andere Anweisung terminator mit
SET TERM
. Andere Firebird-query-tools (z.B. isql) benötigen dies auch, aber es ist eigentlich nicht Teil der syntax von Firebird selbst!So müssen Sie zum ausführen von code während:
Jedoch tut diese immer noch zu einem Fehler führen, da diese Abfrage ist ungültig für PSQL:
SELECT
in einer PSQL-Blocks erfordert eineINTO
Klausel anzeigen die Spalten den Variablen. Und, um die Werte aus derEXECUTE BLOCK
zurückgegeben FlameRobin Sie müssen auch angeben, eineRETURNS
- Klausel, wie beschrieben in der Dokumentation vonEXECUTE BLOCK
:Soweit ich weiß die
SUSPEND
ist technisch hier nicht erforderlich, aber Flamerobin nicht abrufen der zurückgegebenen Zeile, wenn es nicht enthalten ist.Jedoch die oben wird nicht funktionieren, wenn die wählen Sie produziert mehrere Zeilen. Für die, die Sie verwenden müssen
FOR SELECT ... DO
kombiniert mit einemSUSPEND
:Den
SUSPEND
hier gibt die Reihe und wartet, bis der Anrufer abgerufen hat, werden diese Zeile und dann weiter mit derFOR
Schleife. Auf diese Weise wird es die Ergebnisse Durchlaufen.IMHO das zu viel Aufwand für die Parametrierung. Wollen Sie vielleicht einfach nicht diese parametrisieren, wenn Sie verwenden flamerobin, oder verwenden Sie ein tool, dass unterstützt Fragen für die parameter-Werte für die normalen Platzhalter für parameter von Firebird (aber um ehrlich zu sein bin ich nicht sicher, ob es Sie gibt).
InformationsquelleAutor Mark Rotteveel
warum im Herbst ?
InformationsquelleAutor user4215847