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

ТЕМА: Oracle: Что быстрее?

Oracle: Что быстрее? 24 июль 2011 06:25 #2902

  • Myk
  • Myk аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 44
  • Спасибо получено: 0
работаем в 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;

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

Re: Oracle: Что быстрее? 24 июль 2011 06:30 #2903

  • Gwen
  • Gwen аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 49
  • Спасибо получено: 0
Быстрее будет второй вариант....хотя это плохая практика....
В случае, если в таблице несколько строк с разными PID, первый текст даст too_many_rows

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

Re: Oracle: Что быстрее? 24 июль 2011 06:34 #2904

  • Myk
  • Myk аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 44
  • Спасибо получено: 0
Виноват, в таком виде
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;

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

Re: Oracle: Что быстрее? 24 июль 2011 06:34 #2905

  • Doc
  • Doc аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 68
  • Спасибо получено: 1
Какой смысл в этом:
select DISTINCT pid into c1 from table1 where pid=111;
Зачем DISTINCT ?

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

Re: Oracle: Что быстрее? 24 июль 2011 06:35 #2906

  • Pesok
  • Pesok аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 34
  • Спасибо получено: 0
begin
select pid into c1 from table1 where pid=111 and rownum < 2;
return(1);
exception
when no_data_found then return(0);
end;

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

Re: Oracle: Что быстрее? 24 июль 2011 06:36 #2907

  • Myk
  • Myk аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 44
  • Спасибо получено: 0
DISTINCT - нужно определить наличие, или отсутствие записи,
а что в ней (и сколько их всего) совсем по барабану.

табличка (платежей) не маленькая.
pid - это, сразу скажу ,не первичный ключ.
вообщем, есть клиент, его pid - такойто,
на него приходится много платежей.
Вот и нада определить были ли ВООБЩЕ платежи или их не было.

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

  • Страница:
  • 1
  • 2
  • 3