Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка на наличие записи в таблице, определить есть или нет запись в таблице 
:(
    Опции темы
alekspv
Дата 15.9.2014, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 30.3.2009

Репутация: нет
Всего: нет



Здравствуйте. У меня такой вопрос как в таблице Oracle проверить наличие или отсуствие записи? Если запись не найдена, то её нужно вставить, иначе - обновить. Каким образом мне сделать такую проверку?
PM MAIL   Вверх
Zloxa
Дата 15.9.2014, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3470
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Если уникальность записи ограничивается схемой данных (первичный ключ или ограничение уникальности) - проверки выполнять не надо. Над пробовать вставить, если может вставиться, значит вставится, если нет - возникнет исключение, которое следует игнорировать. Это самый простой и надежный способ. Любые прочие способы либо не надежны, либо требуют каких-то дополнительных действий по блокированию ресурсов. Ведь между проверкой и вставкой может произойти вставка в другой сессии и вставка будет произведена при наличии зпаписи в табице.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
LSD
Дата 2.10.2014, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 18
Всего: 537



Цитата(Zloxa @  15.9.2014,  21:05 Найти цитируемый пост)
Любые прочие способы либо не надежны, либо требуют каких-то дополнительных действий по блокированию ресурсов. Ведь между проверкой и вставкой может произойти вставка в другой сессии и вставка будет произведена при наличии зпаписи в табице.

А чем MERGE плох?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Zloxa
Дата 2.10.2014, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3470
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(LSD @ 2.10.2014,  16:28)
А чем MERGE плох?

тем же, чем проверка + вставка.

Сессия 1
Код

SQL> create table merge_test(id number primary key);
 
Table created
SQL> merge into merge_test t
  2    using (select 1 id from dual) s
  3    on (t.id = s.id)
  4    when not matched then insert values (s.id);
 
1 row merged


сессия 2
Код

SQL> merge into merge_test t
  2    using (select 1 id from dual) s
  3    on (t.id = s.id)
  4    when not matched then insert values (s.id);

встала на блокировке

сессия 1
Код

SQL> commit;
 
Commit complete


сессия 2
Код

ORA-00001: unique constraint (SMS.SYS_C0090006) violated
SQL> 


если бы не было ключа - в таблице оказалось бы две записи.

PS: А вобще да. Я наверное слишком много домыслил и дал ответ не на тот вопрос.  smile 

Это сообщение отредактировал(а) Zloxa - 2.10.2014, 17:40


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
LSD
Дата 2.10.2014, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 18
Всего: 537



Цитата(Zloxa @  2.10.2014,  18:33 Найти цитируемый пост)
тем же, чем проверка + вставка.

Не понял, чем метод предлагаемый тобой:
Цитата(Zloxa @  15.9.2014,  21:05 Найти цитируемый пост)
Если уникальность записи ограничивается схемой данных (первичный ключ или ограничение уникальности) - проверки выполнять не надо. Над пробовать вставить, если может вставиться, значит вставится, если нет - возникнет исключение, которое следует игнорировать. Это самый простой и надежный способ.

лучше? Он точно так же встанет на блокировке.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Zloxa
Дата 2.10.2014, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3470
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



LSD, я походу дал ответ не на тот вопрос. ТС ничего не говорит о конкуренции, а  я, походу, пропустил что ему нужно апдейтиться. Почему-то полагал что ему нужно просто вставиться, причем в табличку без констрейнта. С какого вдруг бадуна меня так занесло - хз. Вероятность что ТС будет полезен овтет "MERGE", пожалуй куда выше, чем то, о чем подумал я.  smile 

Это сообщение отредактировал(а) Zloxa - 2.10.2014, 17:48


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.1256 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.