Définir variable et exécuter une requête à l'aide d'EXÉCUTER le BLOC
J'ai une requête importante dans Firebird (que j'ai exécuté à l'aide de FlameRobin), à l'aide d'un paramètre de tous sur la place, mais l'obtention de la requête ci-dessous pour exécuter le fera:
SELECT * FROM customers WHERE customerid = 1234;
Je veux définir 1234
comme une variable, par exemple customerID
, de sorte que je peux facilement le remplacer par quelque chose d'autre.
J'ai appris que j'ai besoin de mettre cela à l'intérieur d'un EXECUTE BLOCK
.
EXECUTE BLOCK
AS
DECLARE customerID INT = 1234;
BEGIN
SELECT * FROM customers WHERE customerid = :customerID
END
Si aucune importance, l'erreur que je reçois est Engine Message :
Dynamic SQL Error
SQL error code = -104
Unexpected end of command - line 3, column 26
OriginalL'auteur Valentin Despa | 2013-10-10
Vous devez vous connecter pour publier un commentaire.
Le problème est que FlameRobin besoin de savoir quand une instruction se termine et l'instruction suivante commence. Par défaut, il utilise le point-virgule (
;
) pour cela. Toutefois, unEXECUTE BLOCK
est essentiellement une procédure stockée qui n'est pas stockée dans la base de données, donc il contient PSQL code qui utilise également le point-virgule comme une déclaration de séparation.La conséquence de ceci est que vous obtenez des erreurs de syntaxe, car FlameRobin est l'envoi incomplet des déclarations sur le serveur (ce qui est: c'est l'envoi d'une déclaration après chaque
;
il rencontre).Vous devez charger FlameRobin pour utiliser une autre déclaration de terminaison à l'aide de
SET TERM
. D'autres Firebird outils de requête (par exemple isql) exiger la même chose, mais il ne fait pas partie de la syntaxe de l'oiseau de feu lui-même!Donc, vous avez besoin pour exécuter votre code comme:
Mais ce sera toujours une erreur, parce que cette requête n'est pas valide pour PSQL: UN
SELECT
dans un PSQL bloc nécessite uneINTO
clause pour mapper les colonnes de variables. Et pour obtenir les valeurs de laEXECUTE BLOCK
retourné à FlameRobin vous devez également spécifier unRETURNS
clause comme décrit dans la la documentation deEXECUTE du BLOC
:Autant que je sache, le
SUSPEND
est techniquement pas nécessaire ici, mais Flamerobin ne récupérera pas la ligne renvoyée si il n'est pas inclus.Cependant, le ci-dessus ne fonctionnera pas si le sélectionnez le produit de plusieurs lignes. Pour cela, vous devez utiliser
FOR SELECT ... DO
combiné avec unSUSPEND
:La
SUSPEND
ici renvoie la ligne et attend jusqu'à ce que l'appelant a les cheveux que ligne, puis se poursuit avec laFOR
boucle. De cette manière, il va itérer sur les résultats.À mon humble avis c'est trop d'effort pour le paramétrage. Vous pourriez envisager tout simplement pas de paramétrage lorsque vous utilisez flamerobin, ou utiliser un outil qui prend en charge de poser pour des valeurs de paramètre pour la normale des espaces réservés aux paramètres de l'oiseau de feu (mais pour être honnête, je ne suis pas sûr si il y en a).
OriginalL'auteur Mark Rotteveel
pourquoi d'ici l'automne ?
OriginalL'auteur user4215847