Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 no_data_found  [new]
Adel2
Guest
Ребята, помогите плиз,
как сделать так чтобы процедура продолжала работать до конца даже если появяется exception no_data_found
пример:

declare
v_username varchar2(50);
r_username varchar2(50);
cursor u_cur
is select username from dba_users ;

begin
open u_cur;
loop
fetch u_cur into v_username;
exit when u_cur%notfound;
--select username from dba_users where

select username into r_username from dba_users@remote.database.com where username=v_username;
--if SQL%NOTFOUND then dbms_output.put_line(v_username||'not found'); end if;
dbms_output.put_line(r_username);
end loop;
exception when no_data_found then dbms_output.put_line(v_username||' not found');
close u_cur;
end;

в результате чего получаю неполный список пользователей пока не натыкаюсь на ошибку not found.. Когда мне нужно чтобы он продолжал искать других пользователей.. Пример в принципе укороченный, в оригинальной работе мне нужно сопоставить две таблицы и находить строки по определенным критериям.
26 дек 07, 08:51    [5096798]     Ответить | Цитировать Сообщить модератору
 Re: no_data_found  [new]
Elic
Member

Откуда:
Сообщений: 29991
RTFM Continuing after an Exception Is Raised (FAQ)
26 дек 07, 08:58    [5096811]     Ответить | Цитировать Сообщить модератору
 Re: no_data_found  [new]
Adel2
Guest
Урраааа, спасибо :)
26 дек 07, 09:16    [5096848]     Ответить | Цитировать Сообщить модератору
 Re: no_data_found  [new]
__vvp_
Member

Откуда: Санкт-Петербург
Сообщений: 1158
declare
v_username varchar2(50);
r_username varchar2(50);
cursor u_cur
is select username from dba_users ;

begin
open u_cur;
loop
fetch u_cur into v_username;
exit when u_cur%notfound;
--select username from dba_users where

--  r_username := null
  for i in (select username /*into r_username*/ from dba_users@remote.database.com where username=v_username)
  loop
--     r_username := i.username;
    dbms_output.put_line(v_username||'not found');
    exit;
  end loop;

--if SQL%NOTFOUND then dbms_output.put_line(v_username||'not found'); end if;
--dbms_output.put_line(r_username);
end loop;
exception when no_data_found then dbms_output.put_line(v_username||' not found');
close u_cur;
end;
26 дек 07, 09:20    [5096861]     Ответить | Цитировать Сообщить модератору
 Re: no_data_found  [new]
__vvp_
Member

Откуда: Санкт-Петербург
Сообщений: 1158
Поправочка
declare
v_username varchar2(50);
r_username varchar2(50);
cursor u_cur
is select username from dba_users ;

begin
open u_cur;
loop
fetch u_cur into v_username;
exit when u_cur%notfound;
--select username from dba_users where

  r_username := null
  for i in (select username /*into r_username*/ from dba_users@remote.database.com where username=v_username)
  loop
    r_username := i.username;
    dbms_output.put_line(r_username);
    exit;
  end loop;

  if r_username is null then
    dbms_output.put_line(v_username||'not found');
  end if;

--if SQL%NOTFOUND then dbms_output.put_line(v_username||'not found'); end if;
--dbms_output.put_line(r_username);
end loop;
--exception when no_data_found then dbms_output.put_line(v_username||' not found');
close u_cur;
end;
26 дек 07, 09:26    [5096879]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить