Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
makondo
Member

Откуда:
Сообщений: 428
declare 
a varchar2(20);
r structman.compound%ROWTYPE;
begin 

select * into r
from structman.compound 
where idnumber ='-D098-01';
...

Если ничего не вернулось, возникает исключение.
Можно ли не объявляя курсора явно, обработать этот случай, чтобы работать дальше по коду?
5 май 06, 13:16    [2634402]     Ответить | Цитировать Сообщить модератору
 Re: PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
Калина
Member

Откуда: Moskau
Сообщений: 2649
declare 
a varchar2(20);
r structman.compound%ROWTYPE;
begin 
begin 
select * into r
from structman.compound 
where idnumber ='-D098-01';
exception 
when no_data_found
.....обработали
end;
а тут то ,что дальше надо делать
------------------------------
Not affilated with VAZ
5 май 06, 13:18    [2634413]     Ответить | Цитировать Сообщить модератору
 Re: PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
BEGIN
...

  BEGIN
    SELECT ... INTO

  EXCEPTION
     when no_data_found then
         ....
  END;

.......
END;
5 май 06, 13:19    [2634418]     Ответить | Цитировать Сообщить модератору
 Re: PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
Elic
Member

Откуда:
Сообщений: 29991
makondo
Чукча не читатель, чукча только писатель?!!
5 май 06, 13:22    [2634452]     Ответить | Цитировать Сообщить модератору
 Re: PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
makondo
Member

Откуда:
Сообщений: 428
Спасибо всем, особенно Elic )
5 май 06, 13:30    [2634515]     Ответить | Цитировать Сообщить модератору
 Re: PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
makondo
Member

Откуда:
Сообщений: 428
Э, нет!
declare 
 a varchar2(20);
 r structman.compound%ROWTYPE;
begin 

select * into r
from structman.compound 
where idnumber ='-D098-0001';


exception
     when no_data_found then
	  a := 'no';
end;	 

 a := r.IDNUMBER; 


dbms_output.put_line('a = ' || a);
dbms_output.put_line('END');

end;



Говорит - ошибка, что после end;, который замыкает Exception не должно ничего быть..

Вообще, в справочнике говорится, что EXCEPTION Должен быть последним в любом блоке - именованном или нет
5 май 06, 13:36    [2634562]     Ответить | Цитировать Сообщить модератору
 Re: PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Дык, а где второй BEGIN? :((
5 май 06, 13:38    [2634576]     Ответить | Цитировать Сообщить модератору
 Re: PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18399
Эээ... Мдаааа....
declare 
 a varchar2(20);
 r structman.compound%ROWTYPE;
begin 
BEGIN
select * into r
from structman.compound 
where idnumber ='-D098-0001';


exception
     when no_data_found then
	  a := 'no';
end;	 
 a := r.IDNUMBER; 
dbms_output.put_line('a = ' || a);
dbms_output.put_line('END');
end;
5 май 06, 13:38    [2634578]     Ответить | Цитировать Сообщить модератору
 Re: PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
Калина
Member

Откуда: Moskau
Сообщений: 2649
Напрягаем внимание, находим отличия, делаем exception последним в блоке
declare 
 a varchar2(20);
 r structman.compound%ROWTYPE;
begin 
  begin 
  select * into r
  from structman.compound 
  where idnumber ='-D098-0001';
  exception
     when no_data_found then
	  a := 'no';
  end;	 
a := r.IDNUMBER; 
dbms_output.put_line('a = ' || a);
dbms_output.put_line('END');

end;
------------------------------
Not affilated with VAZ
5 май 06, 13:38    [2634582]     Ответить | Цитировать Сообщить модератору
 Re: PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
Так просто шел
Guest
А прочитать лень что ли об обработках ошибок, блин. Это же основа.
tru55
BEGIN
...

  BEGIN
    SELECT ... INTO

  EXCEPTION
     when no_data_found then
         ....
  END;

.......
END;
5 май 06, 13:40    [2634596]     Ответить | Цитировать Сообщить модератору
 Re: PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
makondo
Member

Откуда:
Сообщений: 428
Намек понял, спасибо :)
5 май 06, 13:41    [2634600]     Ответить | Цитировать Сообщить модератору
 Re: PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6919
как вариант можно через явный курсор сделать...
5 май 06, 15:38    [2635647]     Ответить | Цитировать Сообщить модератору
 Re: PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
Tolmachov Dmitiry
Member

Откуда: Москва, Пенза
Сообщений: 1520
alex-ls
как вариант можно через явный курсор сделать...
Можно, но не нужно.
5 май 06, 16:39    [2636096]     Ответить | Цитировать Сообщить модератору
 Re: PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
Vadim Romanenko
Member

Откуда: Харьков, Украина
Сообщений: 1462
По-моему
a := r.IDNUMBER; 
нужно поставить перед
exception
     when no_data_found then
	  a := 'no';
end;
5 май 06, 16:46    [2636177]     Ответить | Цитировать Сообщить модератору
 Re: PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5931
Tolmachov Dmitiry
alex-ls
как вариант можно через явный курсор сделать...
Можно, но не нужно.


Не факт. Если отсутствие строк это нормальное явление бизнес логики, то и обрабатывать эту ситуацию следует не в секции exception. Это религия, верить необязательно. А наука говорит, что обработка исключения весьма длительная операция по сравнению с простой проверкой %notfound.
5 май 06, 16:48    [2636189]     Ответить | Цитировать Сообщить модератору
 Re: PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6919
Tolmachov Dmitiry
alex-ls
как вариант можно через явный курсор сделать...
Можно, но не нужно.

опять же - это не есть какой-то совет, это один из вариантов просто...
Если вероятность не найти строку велика, то думаю лучше через явный курсор делать...
5 май 06, 17:47    [2636546]     Ответить | Цитировать Сообщить модератору
 Re: PL\SQL Что делать, если SELECT INTO не вернул данных ?  [new]
Elic
Member

Откуда:
Сообщений: 29991
mcureenab
Tolmachov Dmitiry
alex-ls
как вариант можно через явный курсор сделать...
Можно, но не нужно.
Не факт. Если отсутствие строк это нормальное явление бизнес логики, то и обрабатывать эту ситуацию следует не в секции exception. Это религия, верить необязательно. А наука говорит, что обработка исключения весьма длительная операция по сравнению с простой проверкой %notfound.
Тогда уж через "полуявный" курсор: for in (select ) loop ...; exit; end loop;
5 май 06, 18:33    [2636701]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить