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

Откуда: г. Краснодар
Сообщений: 4
В теле PL\SQL процедуры мне необходимо узнать, есть ли в табличке строки, удовлетворяющие конкретному условию, и в зависимости от этого сделать то или другое..
Приведу вам код того, как я это делаю, но у меня оччень нехорошее предчуствие, что эт совсем не правильно (как минимум не изящно):
select 1
    into switch
    from cabinet_schedule_def csd
    where ((csd.first_staff_id = p_first_staff_id) or
          (csd.second_staff_id = p_first_staf_id)) and
          (rownum = 1);
  exception
    when no_data_found then
      select 0 into switch from dual;
  end;
И затем я анализирую переменную switch...
20 авг 07, 15:05    [4548013]     Ответить | Цитировать Сообщить модератору
 Re: Помогите правильно сделать  [new]
Дубовая голова
Member [заблокирован]

Откуда: с цепи сорвался
Сообщений: 1821
Совет от Elic-a
20 авг 07, 15:09    [4548065]     Ответить | Цитировать Сообщить модератору
 Re: Помогите правильно сделать  [new]
Балан Александр Владимирович
Member

Откуда: г. Краснодар
Сообщений: 4
Спасибо большое, ответ нашёлся :)
Вот по-моему исчерпывающий ответ...
[url=http://]asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1525380674899[/url]
20 авг 07, 15:45    [4548432]     Ответить | Цитировать Сообщить модератору
 Re: Помогите правильно сделать  [new]
stax..
Guest
вообщето говоря вопрос почти религиозный
разнве есть подходы
кто как
1 Как вы
2 where exists (мне нравится)
3 for
4 соunt
5 fetch
....

но вот ето select 0 into switch from dual;
имхо плохо надо
switch:=0;
...
stax
20 авг 07, 15:46    [4548438]     Ответить | Цитировать Сообщить модератору
 Re: Помогите правильно сделать  [new]
wgm
Member [заблокирован]

Откуда:
Сообщений: 4739
Балан Александр Владимирович
В теле PL\SQL процедуры мне необходимо узнать, есть ли в табличке строки, удовлетворяющие конкретному условию, и в зависимости от этого сделать то или другое..
Приведу вам код того, как я это делаю, но у меня оччень нехорошее предчуствие, что эт совсем не правильно (как минимум не изящно):
select 1
    into switch
    from cabinet_schedule_def csd
    where ([color=red]([/color]csd.first_staff_id = p_first_staff_id[color=red])[/color] or
          [color=red]([/color]csd.second_staff_id = p_first_staf_id[color=red])[/color]) and
          [color=red]([/color]rownum = 1[color=red])[/color];
  exception
    when no_data_found then
      select 0 into switch from dual;
  end;
И затем я анализирую переменную switch...


Красным выделены лишние скобки, если Вас это беспокоит :)

А если серьёзно, я делаю так:

select nvl(max(csd.first_staff_id),0) into switch
    from cabinet_schedule_def csd
    where csd.first_staff_id = p_first_staff_id or csd.second_staff_id = p_first_staf_id;
20 авг 07, 17:20    [4549419]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить