Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
SQL, PL/SQL, T-SQL: запросы, DML DDL операторы, пакеты, процедуры, функции, триггеры и последовательности.
  • Страница:
  • 1
  • 2
  • 3

ТЕМА:

Re: Oracle: Что быстрее? 12 года 8 мес. назад #2908

  • Gwen
  • Gwen аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 5
  • Спасибо получено: 0
declare
n number := 0;
begin
select 1
into n from table1 where pid=111 ;
return(n);
exception
when no_data_found then
n := 0;
return(n);
when Others Then
n := -1 * sqlcode;
return(n);
end;

Подойдет?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Что быстрее? 12 года 8 мес. назад #2909

  • Doc
  • Doc аватар
  • Не в сети
  • Захожу иногда
  • Захожу иногда
  • Сообщений: 41
  • Спасибо получено: 0
select 1 from dual

where exists ( select null from payment_table p

               where p.pid = 111);


- возвращаешь0 или 1 запись
то есть для норм работы нужно использовать pl/sql block
и обработки exception (no_data_found)

select 1 from dual

where exists ( select null from payment_table p

               where p.pid = 111)

union all

select 0 from dual

where not exists ( select null from payment_table p

                   where p.pid = 111);


-- возвращает всегда 1 запись
-- не NOT EXISTS это оч плохое решение
-- если поле p.pid не имеет ограничения NOT NULL
--
-- работает где угодно
-- и всегда выдает одну запись

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Что быстрее? 12 года 8 мес. назад #2910

нужно определить наличие, или отсутствие записи
select count(pid) into c1 from table1 where (pid=111);

c1=0 - нет записей,
с1>0 - есть записи.

Или так
select decode(count(pid),0,0,1) into c1 from table1 where (pid=111);

c1=0 - нет записей,
с1=1 - есть записи.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Что быстрее? 12 года 8 мес. назад #2911

  • Gwen
  • Gwen аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 5
  • Спасибо получено: 0
Или так :))
select nvl(max(1),0) into <кудато> from <table> where pid=<чегото>;
Короче извращаться можно долго и по всякому :)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Что быстрее? 12 года 8 мес. назад #2912

  • Doc
  • Doc аватар
  • Не в сети
  • Захожу иногда
  • Захожу иногда
  • Сообщений: 41
  • Спасибо получено: 0
Чтобы выяснить наличие хотя бы одной записи с pid=111 , например, в таблице из миллиона ззаписей , среди которых 999000 штук с pid=111 , по-вашему , надо тщательно убедиться (фулсканом или фулиндекссканом), что их именно 999000 и затем гордо сказать - ДА ! В таблице ЕСТЬ запись с pid=111 !!!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Что быстрее? 12 года 8 мес. назад #2913

Ну так как всё-таки надо ПРАВИЛЬНО определять присутствие или отсутствие записей в таблице, удовлетворяющих определенному условию?
к примеру, чем вариант
select pid into c1 from table1 where pid=111 and rownum = 1;
хуже варианта
select pid into c1 from table1 where pid=111 and rownum < 2; ?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
  • 3
Время создания страницы: 0.221 секунд