powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Процедура
13 сообщений из 13, страница 1 из 1
Процедура
    #32185191
Глызин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите плиз как правильно в процедуре проверить если такая запись в таблицы или ее нет
вот пример который не проходит что я делаю не так

select a.cheetid into ch from cheet a where (a.cheetdatest = datest and a.cheetdateend = dateend);

if (ch is null) then
....
else
....
end if;

Здесь 2 вопроса
1. если табл. пустая он не проходит
2. если возращает много a.cheetid тоже ругаеться
в чем дело?
как правильно создать такую процедуру
...
Рейтинг: 0 / 0
Процедура
    #32185204
Vladimir_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самый простой способ - выбирай count(a.cheetid) и проверяй на = 0
...
Рейтинг: 0 / 0
Процедура
    #32185209
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и тянешь лямку без чтения концепта:-)

select into должен возвращать одну и только одну строку если не используется bulk collect, иначе кидаются exceptions

no_data_found
too_many_rows

Используй count

Код: plaintext
1.
2.
3.
4.
5.
6.
select count(a.cheetid) into ch from cheet a where (a.cheetdatest = datest and a.cheetdateend = dateend); 

if (ch =  0 ) then 
.... 
else 
.... 
end if; 
...
Рейтинг: 0 / 0
Процедура
    #32185212
Глызин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не правда я все читал знаю чем is null отличаеться от <>
все читал а за совет насчет count спасибочки
:-)
...
Рейтинг: 0 / 0
Процедура
    #32185221
Vladimir_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не в обиду будет сказано:
есть разница между все читал и что-то понял
...
Рейтинг: 0 / 0
Процедура
    #32185227
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не поводу is null, а по поводу select into и концепции курсоров ...

select into должен возвращать одну и только одну строку - об этом говорится в первую очередь практически в любой доке.
...
Рейтинг: 0 / 0
Процедура
    #32185235
Глызин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не знал :-)
...
Рейтинг: 0 / 0
Процедура
    #32185465
raven13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В догонку

select count(a.cheetid) into ch from cheet a where (a.cheetdatest = datest and a.cheetdateend = dateend) and rownum<2;
...
Рейтинг: 0 / 0
Процедура
    #32185471
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to raven13

А что запрос типа

Код: plaintext
select count(fld) from tbl;


/без group by/ может при каких то обстоятельствах вернуть больше одной строки?
...
Рейтинг: 0 / 0
Процедура
    #32185500
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to raven13

Извиняюсь, теперь поняла вашу идею - чтобы count() всегда возвращал только 0 или 1:-)
...
Рейтинг: 0 / 0
Процедура
    #32186107
AndrewS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
declare
	is_record	boolean;
	nEmpNo		number:=  1111 ;
	dummy		number;
begin
    begin
         select  1 
        from emp
        where exists ( select  1  from emp where empno = nEmpNo );
        is_record:= true;
    exception
    when no_data_found then
        is_record:= false;
    end;
end;
...
Рейтинг: 0 / 0
Процедура
    #32186160
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я бы еще добавил
select max(a.cheetid), count(a.cheetid) into ch,cnt from cheet a where (a.cheetdatest = datest and a.cheetdateend = dateend) and rownum<2;
Чтобы за значением два раза не ходить
...
Рейтинг: 0 / 0
Процедура
    #32186183
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Function fc ( datest In date, dateend In date)
return Number
Is
Result Number := 0;
Begin
select 1
into result
from cheet a where (a.cheetdatest = datest and a.cheetdateend = dateend)
return(Result);
Exception
when NO_DATA_FOUND Then
result := 0;
Return(result);
when Others Then
Result := -1;
return(Result);
End fc;
----------
if (fc(sysdate - 10, sysdate)) > 0 Then
.........
Else
.......
End If;
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Процедура
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]