Comment SÉLECTIONNER une PROCÉDURE dans Firebird 2.5
Je suis en utilisant Firebird Embedded v2.5. Comment utiliser les procédures de requête (SELECT) ?
Ma procédure:
SET TERM ^ ;
CREATE PROCEDURE FN_TEST( Y INTEGER )
RETURNS( X INTEGER)
AS
BEGIN
X = Y + 1;
END^
SET TERM ; ^
Je veux faire une liste de champ de la table modifiée par une procédure, comme ceci:
SELECT some_table_field_1,
fn_test( 4 ) AS zzz,
some_table_field_2,
fn_test( some_table_field_2 ) AS field_2_modified
FROM tb_test
Besoin de résultats (tableau):
some_table_field_1 zzz some_table_field_2 field_2_modified
---------------------------------------------------------------------------
aaa 5 14 15
bbb 5 23 24
www 5 75 76
Cette chose fonctionne bien dans PostgreSQL, mais je ne sais pas comment faire cela dans Firebird.
Quel est exactement votre problème? Obtenez-vous un message d'erreur? Si oui, partagez-la
OriginalL'auteur Emil | 2011-03-03
Vous devez vous connecter pour publier un commentaire.
fn_test
n'est pas sélectionnable (c'est un exécutable procédure). La solution proposée produit un demande non valide BLR au décalage... d'erreur.OriginalL'auteur rstrelba
Essayer
fn_test
n'est pas sélectionnable (c'est un exécutable procédure). La solution proposée produit un demande non valide BLR au décalage... d'erreur.OriginalL'auteur To horse
FN_TEST
est un exécutable procédure: il peut être appelé via leEXECUTE PROCEDURE
déclaration et il renvoie à un ensemble unique de paramètres de sortie.Dans Firebird 2.x seulement un sélectionnable procédure stockée peut être "utilisé" comme un point de vue /de la table (voir Firebird Procédures Stockées).
Donc:
produit un demande non valide BLR au décalage... erreur.
Vous pourriez modifier votre procédure suggéré mais, en fait, la fonctionnalité a été introduite dans Firebird 3 sous la forme de fonction stockée:
Plus de détails dans Fonctions avec PSQL dans Firebird 3.
OriginalL'auteur manlio
Utilisation de l'UDF, afin de gérer le calcul sur les champs.
Procédure stockée sont possible seulement dans la Clause from.
OriginalL'auteur Marco
Essayer cette
OriginalL'auteur FlixLux
Comme JustMe a dit, vous ne pouvez pas appeler des procédures stockées dans un select. Vous pouvez appeler la procédure stockée uniquement dans la section. Une autre solution pour votre problème est de créer un choix de procédure comme ceci:
Après exécutez ce code, vous pouvez tout simplement requête
select * from myproc(4)
et obtenir ce que vous voulez.OriginalL'auteur Francesco Palladino
Vous ne pouvez pas appeler des procédures stockées dans Firebird de la liste de sélection. Vous devez écrire le choix de la procédure avec le désir de résultat ou d'écrire un UDF de fonction pour faire ce que vous avez dans
fn_test
procédure.Pour votre cas, le plus simple est:
OriginalL'auteur JustMe
Vous pouvez utiliser EXECUTE du BLOC, jetez un oeil EXÉCUTER LE BLOC
OriginalL'auteur Biju Soman