Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 Переход на следующую итерацию и выход из цикла for  [new]
Semen Popov
Member

Откуда: Сыктывкар
Сообщений: 793
Здравствуйте всем!

DB2 9.7

В теле хранимой процедуры есть цикл for. Какие операторы позволяют выполнить преждевременный выход из цикла и принудительный переход на следующую итерацию?

Спасибо
С уважением, Семен Попов
4 окт 16, 20:04    [19743690]     Ответить | Цитировать Сообщить модератору
 Re: Переход на следующую итерацию и выход из цикла for  [new]
Semen Popov
Member

Откуда: Сыктывкар
Сообщений: 793
for c as select * from TAB
do
     If (FLD=1) then 
         break;
     else
         continue;
     end if;
end for

Ругается на continue. break скушал
5 окт 16, 08:32    [19744547]     Ответить | Цитировать Сообщить модератору
 Re: Переход на следующую итерацию и выход из цикла for  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4850
Semen Popov,

Добрый день.
--#SET TERMINATOR @
set serveroutput on@

begin
  declare i int default 1;
  for c1 as select tabschema, tabname from syscat.tables
  do
    call dbms_output.put_line(tabschema||'.'||tabname);
    set i=i+1;
    if (i>5) then 
      goto exit;
    end if;
  end for;
  exit:
  set i=i;
end@
5 окт 16, 09:27    [19744695]     Ответить | Цитировать Сообщить модератору
 Re: Переход на следующую итерацию и выход из цикла for  [new]
Semen Popov
Member

Откуда: Сыктывкар
Сообщений: 793
Mark Barinstein, спасибо. Но что-то не подходит

create or replace function TMPFUNC (F_PAR integer)
returns integer
reads sql data
no external action
begin
declare f_retval integer default 0;
for cond_ as (select * from MYTAB where COND=F_PAR)
do
if (FLD>0) then
goto next;
else
goto exit;
end if;
next:
end for;
exit:
return f_retval;
end

DB21034E Данная команда обрабатывалась как оператор SQL, поскольку она не
является допустимой командой процессора командной строки. При обработке SQL
было получено сообщение:
SQL0104N Обнаружен неправильный элемент "end for; exit:" после текста ";
end if; next: ". Список возможных правильных элементов: "<space>". LINE
NUMBER=16. SQLSTATE=42601
5 окт 16, 12:08    [19745526]     Ответить | Цитировать Сообщить модератору
 Re: Переход на следующую итерацию и выход из цикла for  [new]
db2sql
Guest
Semen Popov,

LEAVE+ITERATE
http://www.ibm.com/support/knowledgecenter/en/SSEPGG_10.5.0/com.ibm.db2.luw.apdv.sqlpl.doc/doc/c0024359.html
5 окт 16, 12:35    [19745704]     Ответить | Цитировать Сообщить модератору
 Re: Переход на следующую итерацию и выход из цикла for  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4850
Semen Popov,
+ values test_for('SYSCAT')
create or replace function test_for(p_tabschema varchar(128))
returns integer
reads sql data
no external action
begin atomic
  declare f_retval int default 0;
  forloop:
  for c1 as select tabname from syscat.tables where tabschema=p_tabschema
  do
    set f_retval=f_retval+1;
    if (f_retval>5) then 
      leave forloop;
    else
      iterate forloop;
    end if;
  end for;
  return f_retval;
end@

5 окт 16, 12:42    [19745745]     Ответить | Цитировать Сообщить модератору
 Re: Переход на следующую итерацию и выход из цикла for  [new]
Semen Popov
Member

Откуда: Сыктывкар
Сообщений: 793
Спасибо большое. Сработало
5 окт 16, 12:56    [19745832]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить