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

1.
begin
select DISTINCT pid into c1 from table1
return(1);
exception
when no_data_found then return(0);
end;
или

2.
begin
select pid into c1 from table1
return(1);
exception
when no_data_found then return(0);
when TOO_MANY_ROWS THEN Return(1);
end;
...
Рейтинг: 0 / 0
что будет быстрее
    #32119971
Рустем
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быстрее будет второй вариант....хотя это плохая практика....
...
Рейтинг: 0 / 0
что будет быстрее
    #32119996
Костя_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В случае, если в таблице несколько строк с разными PID, первый текст даст too_many_rows
...
Рейтинг: 0 / 0
что будет быстрее
    #32120130
roboforce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Виноват, в таком виде
1.
begin
select DISTINCT pid into c1 from table1 where pid=111;
return(1);
exception
when no_data_found then return(0);
end;
или

2.
begin
select pid into c1 from table1 where pid=111;
return(1);
exception
when no_data_found then return(0);
when TOO_MANY_ROWS THEN Return(1);
end;
...
Рейтинг: 0 / 0
что будет быстрее
    #32120134
Александр Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой смысл в этом:
select DISTINCT pid into c1 from table1 where pid=111;
Зачем DISTINCT ?
...
Рейтинг: 0 / 0
что будет быстрее
    #32120138
ora600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
begin
select pid into c1 from table1 where pid=111 and rownum < 2;
return(1);
exception
when no_data_found then return(0);
end;
...
Рейтинг: 0 / 0
что будет быстрее
    #32120148
select DISTINCT pid into c1 from table1 where pid=111;

ПОЛНЫЙ БРЭД....
...
Рейтинг: 0 / 0
что будет быстрее
    #32120444
roboforce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ниче не бред, нужно определить наличие, или отсутствие записи,
а что в ней (и сколько их всего) совсем по барабану.

табличка (платежей) не маленькая.
pid - это, сразу скажу ,не первичный ключ.
вообщем, есть клиент, его pid - такойто,
на него приходится много платежей.
Вот и нада определить были ли ВООБЩЕ платежи или их не было.
...
Рейтинг: 0 / 0
что будет быстрее
    #32120460
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chto-to vrode etogo::

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;

Podoidet?
...
Рейтинг: 0 / 0
что будет быстрее
    #32120475
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
select  1  from dual
where exists ( select null from payment_table p
               where p.pid =  111 );

-- vozvraschaet 0 ili 1 zapis
t.e dlya "normalnoy raboty nado ispolzovat pl/sql block
i obrabotku exception (no_data_found)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
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 );

-- vozvraschaet vsegda 1 zapis
-- no NOT EXISTS eto ochen plohoe reshenie
-- esly pole p.pid ne imeet ogranicheniya NOT NULL
--
-- rabotaet gde ugodno (i v sql i v pl/sql)
-- i vsegda vidaet 1 zapis
...
Рейтинг: 0 / 0
что будет быстрее
    #32121899
Yuric
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Полный бред!!!
>>нужно определить наличие, или отсутствие записи

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 - есть записи.
...
Рейтинг: 0 / 0
что будет быстрее
    #32121913
[IPT]-Said
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или так :))
select nvl(max(1),0) into <кудато> from <table> where pid=<чегото>;
Короче извращаться можно долго и по всякому :)
...
Рейтинг: 0 / 0
что будет быстрее
    #32121960
ora600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Yuric
>Полный бред!!!

Чтобы выяснить наличие хотя бы одной записи с pid=111 , например, в таблице из миллиона ззаписей , среди которых 999000 штук с pid=111 , по-вашему , надо тщательно убедиться (фулсканом или фулиндекссканом), что их именно 999000 и затем гордо сказать - ДА ! В таблице ЕСТЬ запись с pid=111 !!!
...
Рейтинг: 0 / 0
что будет быстрее
    #32122008
Виктор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так как всё-таки надо ПРАВИЛЬНО определять присутствие или отсутствие записей в таблице, удовлетворяющих определенному условию?
к примеру, чем вариант
select pid into c1 from table1 where pid=111 and rownum = 1;
хуже варианта
select pid into c1 from table1 where pid=111 and rownum < 2; ?
...
Рейтинг: 0 / 0
что будет быстрее
    #32122442
Chira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А протестировать предложенные варианты на своих данных лень?
Приведи EXPLAIN PLANs.

посмотри вариант от ShgGena

select 1 from dual
where exists ( select null from payment_table p
where p.pid = 111);
...
Рейтинг: 0 / 0
что будет быстрее
    #32122509
Виктор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Chira: Нет, мне не лень протестировать варианты, и как это сделать, я тоже знаю.
Просто все чего-то советуют, уверенные в том что их код лучше (а может просто так, из чувства коллективизма). Но может быть сам оракл (вернее спецы из компании) что-то рекомендует по данному вопросу?
...
Рейтинг: 0 / 0
что будет быстрее
    #32122609
Chira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если интересует мнение спесов с Oracle.com, так спроси у них. Там и форум есть.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / что будет быстрее
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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