Как мне использовать цикл For в Firebird? - PullRequest
3 голосов
/ 18 августа 2011

Может кто-нибудь объяснить мне синтаксис цикла For в Firebird?

Вот код, который у меня есть:

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

Обновление: спасибо, что дали емуПопробуйте, но я не вижу какой-либо существенной разницы между запросом, который я написал, и запросом, включенным в ответы.Хотя вышеупомянутый запрос успешно выполняется на моем конце, но когда я вижу данные в таблице, обновления не происходит.

На самом деле я делал ошибку v.dumb, я выполнял изменение запроса хранимой процедуры - который успешно выполняется, и я былпри условии, что это внесет необходимые изменения.позже я выполнил хранимую процедуру, и она работала безупречно.Спасибо всем, что уделили нам время :) ..

Ответы [ 2 ]

5 голосов
/ 18 августа 2011

Для оператор в Firebird отличается от Для , скажем, в Паскале, где он увеличивает переменную цикла и выполняет блок кода до тех пор, пока не будет выполнено конечное значение.

В Firebird Для оператор принимает набор записей (результат выполнения запроса) и проходит по ним. Для каждой записи будет выполнен блок кода. При желании значения некоторых полей из записи могут быть помещены в локальные переменные, включенные в секцию INTO . Значения таких переменных можно использовать внутри блока кода.

В вашем примере запрос:

SELECT table1.Column1 from table1 into :Var1

Будет выполнено и для каждой записи в наборе результатов будет выполнен оператор:

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

Для него переменная: Var будет содержать значение table1.Column1 текущей записи.

2 голосов
/ 18 августа 2011
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

Для каждой строки в таблице «один» выполнить оператор вставки. Tmp содержит значение текущей строки из таблицы "one".

P.S. извините за мой английский

...