PL/SQL Помогите начинающему. Почему не работает?
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



PL/SQL Помогите начинающему. Почему не... Expand / Collapse
Автор
Сообщение
19.04.2002 12:54
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 25.04.2002 17:15
Сообщ.: 5, Visits: 56
Доброе время суток, уважаемые :)
подскажите, пожалуйста, где я не прав.
надо выбрать одно значение из таблицы в переменную
пишу :

select ROOTKDOG into v_kdogroot from dogdepend where kdogemp = p_kdog1;
if sql%notfound then
v_kdogroot:=p_kdog1;
end if;

вываливает NO_DATA_FOUND. так оно есть, поэтому и пишу if sql%notfound
но зачем мне эксепшен?
не делать же курсор ради одной переменной :-(
Сообщ. #747822
19.04.2002 13:27
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 13.11.2003 10:53
Сообщ.: 43, Visits: 474
Mozno postupit', naprimer, tak:

begin
select ROOTKDOG into v_kdogroot from dogdepend where kdogemp = p_kdog1;
exception
when NO_DATA_FOUND then
v_kdogroot:=p_kdog1;
end;

To est' prosto perehvatit' exception i obrabotat' ego tak kak hochetsya.
Сообщ. #747823
19.04.2002 15:02
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 25.04.2002 17:15
Сообщ.: 5, Visits: 56
Спасибо, но мне нужна эта переменная дальше в коде, а после эксепшена процедура завершает работу.
Сообщ. #747839
19.04.2002 15:09
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 13.11.2003 10:53
Сообщ.: 43, Visits: 474
>после эксепшена процедура завершает работу.

Eto ne sovsem tak...


declare
v_kdogroot ....;
begin
........
begin
select ROOTKDOG into v_kdogroot from dogdepend where kdogemp = p_kdog1;
..... -- lines of code #X
exception
when NO_DATA_FOUND then
v_kdogroot:=p_kdog1;
end;

..... -- Переменную v_kdogroot можно будет использовать здесь, даже если возникло перехваченное исключение (однако код #X будет пропущен)

end;

Сообщ. #747841
19.04.2002 15:17
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 25.04.2002 17:15
Сообщ.: 5, Visits: 56
Точно-точно, спасибо.
что называется за деревьями и леса не заметил :)
Сообщ. #747842
19.04.2002 15:18
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 13.11.2003 10:53
Сообщ.: 43, Visits: 474
Пожалуйста.
Сообщ. #747843
19.04.2002 17:37
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 23.10.2002 13:53
Сообщ.: 22, Visits: 243
%notfound лучше использовать в курсорах или в конструкциях update или delete, т.к. в них, если ни одна запись не будет найдена, никакой ошибки не произойдет, а здесь при select...into возникает реальный эксепшен, и его надо обрабатывать.
Сообщ. #747867
19.04.2002 17:54
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 19.04.2002 17:48
Сообщ.: 1, Visits: 12
Необходимо поместить select pl блок и добавить exception no_data_found
declare
fff ....;
Begin
begin
select .. into fff from ... where ....;
exception
when no_data_found then
fff := .....;
end;
End;
и все будет работать
Сообщ. #747871
22.04.2002 12:01
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 24.04.2002 10:25
Сообщ.: 72, Visits: 793