![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
Привет
![]() Подскажите плиз решение сложившейся ситуации. Есть таблица в БД, в которой есть композитный ключ, который состоит из поля name и boolean поля deleted. Возникла проблема, при попытке сделать следующее: INSERT INTO User (name, deleted) VALUES ('dima', false); -- OK INSERT INTO User (name, deleted) VALUES ('dima', null); -- OK INSERT INTO User (name, deleted) VALUES ('dima', null); -- Exception !!! java.sql.SQLException: ORA-00001: unique constraint violated В MySQL, такое работает, т.е. можно сколько угодно создать записей ('dima', null), в Oracle нет. Нашёл похожую проблему в тырнете, предлагают ее решить вот так:
Только я не понимаю, как это применить к моей ситуации, подскажите пожалуйста ![]() |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
в SQL оракла же нет такого слова. ![]() если тебе надо обеспечить уникальность не удаленных записей...
Оракл не хранит в индексе неопределенных значений. Функция, по которой построен индекс, возвращает не определенное значение, если срока помечена как удаленная. В 11й датабазе появились вычислимые столбцы. Мне кажется использовать вычислимый столбец тут было бы более кошерно. Это сообщение отредактировал(а) Zloxa - 6.5.2011, 12:53 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
![]() ![]() Попробовал твой код
ошибка: ora-00969 Добавлено через 1 минуту и 58 секунд мне нужно обеспечить чтобы у меня в таблице было только одно ('dima', 0) и сколько угодно ('dima', null) ![]() |
|||
|
||||
Zloxa |
|
||||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
ORA-00969: missing ON keyword вставить после имени индекса:
Добавлено через 42 секунды
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
||||
|
|||||
Samotnik |
|
||||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
вот похожая проблема, но почему то у меня не работает это решение, я пишу
индекс создается, но всё равно, при попытке вставить второй ('dima', null) - получаю ORA-00001: unique constraint violated Добавлено через 4 минуты и 23 секунды Zloxa, спасибо, выполнил твой
всё равно, при попытке вставить второго ('dima', null) - ORA-00001: unique constraint violated |
||||
|
|||||
Zloxa |
|
||||||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
здесь решается совсем другая задача. Данный индекс допустит повторение name если не заполнен deleted и повторение deleted лишь если не заполнен name.
Надо разбраться во что хибер преобразует false. В этом ключ к успеху действа Добавлено @ 13:15 если false преобразуется в null, то индексирваться должно выражение (decode(deleted,null,name)) Это сообщение отредактировал(а) Zloxa - 6.5.2011, 13:16 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
||||||
|
|||||||
Samotnik |
|
||||||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
c false проблемы нету, есть проблема с null. А null остается null'ом без преобразований Добавлено через 1 минуту и 53 секунды
так ведь мне это и нужно, мне нужно разрешить повторение name, если deleted == null Добавлено через 2 минуты и 24 секунды логично ли предположить, что в таком случае
спасет меня ? |
||||||
|
|||||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
тебе так надо? -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
почти, нужно вот так: insert into test values ('дима',0); - ok insert into test values ('дима',null); - ok insert into test values ('дима',null); - ok insert into test values ('дима',null); - ok insert into test values ('дима',null); - ok insert into test values ('дима',null); - ok insert into test values ('дима',null); - ok insert into test values ('дима',0); - тут должна быть ошибка, потому что уже есть "дима" не удаленный, у которого deleted - 0 (т.е. false) |
|||
|
||||
Zloxa |
|
||||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
я ж говорил - ключ - в этом ))
Добавлено через 9 минут и 28 секунд
жаль не заметил раньше ![]() -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
||||
|
|||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
Zloxa, спасибо, да, действительно всё работает, но.
Если у меня уже есть индекс, под названием SYS_C009835, который мешает работе нового, можно как-нибудь приглушить его ? ![]() |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
если он тебе не нужен - дропни его. ))
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: нет Всего: 191 |
Zloxa, в общем я понял, спасибо !
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Oracle" | |
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Oracle | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |