Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Oracle |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
mod Member Откуда: Сообщений: 2279 |
В функции необходимо проверить сущесвует ли запись name скажем Кукуев А.А. используя if. Как это можно реализовать? |
2 июн 06, 15:41 [2735449] Ответить | Цитировать Сообщить модератору |
dmidek Member Откуда: Киев - Дортмунд Сообщений: 117689 |
select count(*) into v_count
from dual
where exists
(select null from scott.emp
where ename = 'KUKUEV');
IF v_count > 0
THEN
-- Estj
ELSE
-- Net
END IF;
|
2 июн 06, 15:44 [2735475] Ответить | Цитировать Сообщить модератору |
Part Member Откуда: Краснодар Сообщений: 187 |
2 dmidek Я бы в большой нагруженной системе не стал так делать - рано или поздно можно получить проблемы |
2 июн 06, 15:49 [2735517] Ответить | Цитировать Сообщить модератору |
dmidek Member Откуда: Киев - Дортмунд Сообщений: 117689 |
Про большую нагруженную пока никто не говорил и что то мне подсказывает что это не тот случай. А как бы Вы стали делать в функции ? |
||
2 июн 06, 15:52 [2735557] Ответить | Цитировать Сообщить модератору |
mod Member Откуда: Сообщений: 2279 |
Я так по-началу и сам хотел сделать, но у меня вызвал опасение такой метод.... |
2 июн 06, 15:53 [2735564] Ответить | Цитировать Сообщить модератору |
dmidek Member Откуда: Киев - Дортмунд Сообщений: 117689 |
Чего боялись ? |
||
2 июн 06, 15:55 [2735582] Ответить | Цитировать Сообщить модератору |
mod Member Откуда: Сообщений: 2279 |
Как-то не элегантно... |
2 июн 06, 15:56 [2735590] Ответить | Цитировать Сообщить модератору |
Takurava Member Откуда: Сообщений: 1776 |
А почему не просто select count(*) into v_count from scott.emp where ename = 'KUKUEV'; |
2 июн 06, 15:56 [2735594] Ответить | Цитировать Сообщить модератору |
dmidek Member Откуда: Киев - Дортмунд Сообщений: 117689 |
А зачем мне считать миллион записей с Кукуевым, если мне достаточно найти одну ? |
||
2 июн 06, 15:56 [2735602] Ответить | Цитировать Сообщить модератору |
dmidek Member Откуда: Киев - Дортмунд Сообщений: 117689 |
А мне нравится ... |
||
2 июн 06, 15:59 [2735629] Ответить | Цитировать Сообщить модератору |
ModelR Member Откуда: Нижний Новгород Сообщений: 1798 |
select count(*) into v_count from scott.emp where ename = 'KUKUEV' and rownum=1; |
||
2 июн 06, 16:01 [2735641] Ответить | Цитировать Сообщить модератору |
Takurava Member Откуда: Сообщений: 1776 |
Элегантно уникальные ключи использовать |
2 июн 06, 16:01 [2735647] Ответить | Цитировать Сообщить модератору |
dmidek Member Откуда: Киев - Дортмунд Сообщений: 117689 |
При чем тут уникальные ключи ? Нигде не сказано, что автор собирается делать с полученной информацией дальше. Может он как раз хочет, чтобы Кукуев был :) ? |
||
2 июн 06, 16:05 [2735689] Ответить | Цитировать Сообщить модератору |
Part Member Откуда: Краснодар Сообщений: 187 |
Не элегантно потому что между анализом кол-ва записей и обработкой есть разрыв по времени. И в зависимости от данных с которыми мы работаем это может вылится в большие проблемы. |
2 июн 06, 16:05 [2735694] Ответить | Цитировать Сообщить модератору |
dmidek Member Откуда: Киев - Дортмунд Сообщений: 117689 |
Где говорится про обработку ? Я решаю задачу из сабжа ... |
||
2 июн 06, 16:07 [2735714] Ответить | Цитировать Сообщить модератору |
Takurava Member Откуда: Сообщений: 1776 |
А действительно, зачем это надо? |
||
2 июн 06, 16:19 [2735831] Ответить | Цитировать Сообщить модератору |
alex-ls Member Откуда: Иркутская обл - Пенза - Москва Сообщений: 6951 |
все же интересно, exists быстрее чем rownum = 1? И если да, то почему? Вопрос именно теоретический... |
||||
2 июн 06, 16:22 [2735860] Ответить | Цитировать Сообщить модератору |
dmidek Member Откуда: Киев - Дортмунд Сообщений: 117689 |
Хоть andrey_anonymous опять вероятно и совершенно справедливо вспомнит о кумирах, которых не надо сотворять , но этой рекомендации мне вполне достаточно :) |
||||||
2 июн 06, 16:41 [2736057] Ответить | Цитировать Сообщить модератору |
maksim2020 Member Откуда: оттуда Сообщений: 113 |
Без if, но тоже вроде бы ничего: DECLARE i NUMBER; BEGIN BEGIN SELECT 1 INTO i FROM Table WHERE NAME = 'Кукуев А.А.'; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20000,'no_data_found'); END; END; С уважением, Максим. |
||
2 июн 06, 17:01 [2736194] Ответить | Цитировать Сообщить модератору |
andrey_anonymous Member Откуда: Москва Сообщений: 18649 |
Честно говоря, подобные вопросы всегда ставят меня в тупик. SQL statement - это не программа. Это декларация. Поэтому сам вопрос лишен смысла. "Скажите, какая из этих турпутевок самая быстрая?" Да туроператор его знает. Смотря на чем и как повезут. То же и с oracle - все зависит от того, как он Ваш запрос решит обработать. Но ИМХО чем точнее Вы декларируете Ваши реальные цели, тем больше шансов у oracle эффективно решить задачу. Чем умнее Вы себе кажетесь, пытаясь SQL программировать, тем скорее Ваши ожидания разойдутся с действительность. ИМХО. |
||||||
2 июн 06, 17:02 [2736197] Ответить | Цитировать Сообщить модератору |
dmidek Member Откуда: Киев - Дортмунд Сообщений: 117689 |
Не особо. А если два Кукуева ? |
||||
2 июн 06, 17:03 [2736213] Ответить | Цитировать Сообщить модератору |
dmidek Member Откуда: Киев - Дортмунд Сообщений: 117689 |
+ 1 Мне это ОЧЕНЬ нравится |
||
2 июн 06, 17:06 [2736234] Ответить | Цитировать Сообщить модератору |
Jura C
Guest |
Бред, а too_many_rows почему не контролируеш. проще select min() into var ... + if var is null then else end if; |
||||
2 июн 06, 17:07 [2736241] Ответить | Цитировать Сообщить модератору |
maksim2020 Member Откуда: оттуда Сообщений: 113 |
Виноват, забыл. |
||||||
2 июн 06, 17:09 [2736260] Ответить | Цитировать Сообщить модератору |
dmidek Member Откуда: Киев - Дортмунд Сообщений: 117689 |
Тушим пожар бензином. Для того, чтобы узнать существование записи, вычисляем минимальный элемент. Кто медленнее ? |
||||||
2 июн 06, 17:11 [2736280] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Oracle | ![]() |