Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / что будет быстрее / 17 сообщений из 17, страница 1 из 1
14.03.2003, 11:00
    #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
14.03.2003, 11:26
    #32119971
Рустем
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что будет быстрее
Быстрее будет второй вариант....хотя это плохая практика....
...
Рейтинг: 0 / 0
14.03.2003, 11:47
    #32119996
Костя_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что будет быстрее
В случае, если в таблице несколько строк с разными PID, первый текст даст too_many_rows
...
Рейтинг: 0 / 0
14.03.2003, 13:43
    #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
14.03.2003, 13:47
    #32120134
Александр Б
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что будет быстрее
Какой смысл в этом:
select DISTINCT pid into c1 from table1 where pid=111;
Зачем DISTINCT ?
...
Рейтинг: 0 / 0
14.03.2003, 13:54
    #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
14.03.2003, 14:02
    #32120148
что будет быстрее
select DISTINCT pid into c1 from table1 where pid=111;

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

табличка (платежей) не маленькая.
pid - это, сразу скажу ,не первичный ключ.
вообщем, есть клиент, его pid - такойто,
на него приходится много платежей.
Вот и нада определить были ли ВООБЩЕ платежи или их не было.
...
Рейтинг: 0 / 0
14.03.2003, 17:45
    #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
14.03.2003, 18:15
    #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
18.03.2003, 11:42
    #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
18.03.2003, 11:57
    #32121913
[IPT]-Said
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что будет быстрее
Или так :))
select nvl(max(1),0) into <кудато> from <table> where pid=<чегото>;
Короче извращаться можно долго и по всякому :)
...
Рейтинг: 0 / 0
18.03.2003, 12:32
    #32121960
ora600
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что будет быстрее
2Yuric
>Полный бред!!!

Чтобы выяснить наличие хотя бы одной записи с pid=111 , например, в таблице из миллиона ззаписей , среди которых 999000 штук с pid=111 , по-вашему , надо тщательно убедиться (фулсканом или фулиндекссканом), что их именно 999000 и затем гордо сказать - ДА ! В таблице ЕСТЬ запись с pid=111 !!!
...
Рейтинг: 0 / 0
18.03.2003, 12:56
    #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
18.03.2003, 19:39
    #32122442
Chira
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что будет быстрее
А протестировать предложенные варианты на своих данных лень?
Приведи EXPLAIN PLANs.

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

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


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