2011-08-18 11 views
3

Quelqu'un peut-il m'expliquer la syntaxe de la boucle For dans Firebird?Comment utiliser la boucle For dans Firebird?

Voici le code que j'ai jusqu'à présent:

As 
Declare variable Var1 integer; 
begin 
Insert into table1 
-- Select query to insert some enteries in table 1 - Done successfully. 
FOR SELECT table1.Column1 from table1 into :Var1 
Do 
Begin 
Update tableabc.column1 = (select tablexyz. column1 from tablexyz where tablexyz.ID = :Var1) where tableabc.ID = :Var1 
End 

Mise à jour: Merci pour lui donner un essai, mais je ne vois aucune différence majeure entre la requête que je l'ai écrit et requête dans les réponses inclus. Bien que la requête ci-dessus s'exécute avec succès à ma fin, mais quand je vois des données dans le tableau il ne se produit aucune mise à jour.

En fait, je faisais une erreur v.dumb, j'exécutais une requête de procédure stockée alter - qui s'exécute avec succès et je supposais que cela apporterait les modifications nécessaires. plus tard j'ai exécuté la procédure stockée et cela a fonctionné parfaitement. Merci à tous pour épargner votre temps :) ..

Répondre

5

Pour opérateur Firebird est pas comme Pour, disons, Pascal où il incrémente variable de boucle et exécute un bloc de code jusqu'à ce que la valeur d'arrivée sera atteint.

Dans Firebird Pour l'opérateur prend un ensemble d'enregistrements (résultat de l'exécution d'une requête) et les boucle. Pour chaque enregistrement, un bloc de code sera exécuté. Les valeurs facultatives de certains champs de l'enregistrement peuvent être placées dans des variables locales inscrites dans la section INTO. Les valeurs de ces variables pourraient être utilisées dans un bloc de code.

Dans votre exemple une requête:

SELECT table1.Column1 from table1 into :Var1 

sera exécuté et pour chaque enregistrement de jeu de résultats seront exécutés opérateur:

Update tableabc.column1 = 
    (select tablexyz. column1 from tablexyz where tablexyz.ID = :Var1) 
where tableabc.ID = :Var1 

Pour elle variable: Var contiendra la valeur de table1. Colonne1 de l'enregistrement actuel.

+0

Merci pour cette belle explication. – Rohit

2
create procedure TEST 
as 
declare variable TMP integer; 
begin 
    for select one_f from one into :tmp 
    do 
    begin 
     insert into two (two_f) values (:tmp); 
    end 
    suspend; 
end 

Pour chaque ligne du tableau "un", exécutez l'insertion d'opérateur. Tmp contient la valeur de la ligne courante de la table "un".

P.S. désolé pour mon anglais

Questions connexes