Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ограничение / 15 сообщений из 15, страница 1 из 1
17.08.2012, 17:16
    #37921187
Мутирую
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение
Комрады,
как реализовать следующие ограничение?

таблица из двух полей.

Поле2 не может быть null, если в таблице есть хотя бы одна запись с таким же полем1 и полем2 не-null.
...
Рейтинг: 0 / 0
17.08.2012, 17:21
    #37921192
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение
МутируюКомрады,
как реализовать следующие ограничение?

таблица из двух полей.

Поле2 не может быть null, если в таблице есть хотя бы одна запись с таким же полем1 и полем2 не-null.
матвью на коммит. однако, ничего хорошего в этом нет.
перепроектируйте таблицу вашу на две.
...
Рейтинг: 0 / 0
17.08.2012, 17:27
    #37921201
Мутирую
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение
Я Вас понял. Спасибо за вариант, но , к сожалению, меня на "это" не подпустят.
Может есть какой то вариант с тригерами, чек-констрейнтами, пакетами ?
...
Рейтинг: 0 / 0
17.08.2012, 17:32
    #37921211
Мутирую
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение
Хотя , если разбить на две таблицы, насколько я понимаю, результат будет тот же.
Повесив триггер на update второй таблицы, подсчет будет вестись внутри этого триггера. Мутируем.
...
Рейтинг: 0 / 0
17.08.2012, 17:33
    #37921213
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение
МутируюЯ Вас понял. Спасибо за вариант, но , к сожалению, меня на "это" не подпустят.
Может есть какой то вариант с тригерами, чек-констрейнтами, пакетами ?
на триггеры забейте.
с констрейнтами - в принципе реализуемо (но, что вижу = тоже через матвью и ссылки на них)
пакеты - конечно, да. но тоже фиговато, ибо тут придётся бутылочное горло изваять
...
Рейтинг: 0 / 0
17.08.2012, 18:02
    #37921256
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение
МутируюПоле2 не может быть null, если в таблице есть хотя бы одна запись с таким же полем1 и полем2 не-null.поле2 NOT NULL.
...
Рейтинг: 0 / 0
17.08.2012, 18:19
    #37921275
Мутирую
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение
-2-МутируюПоле2 не может быть null, если в таблице есть хотя бы одна запись с таким же полем1 и полем2 не-null.поле2 NOT NULL.

Не пройдет.
Ситуация: если не существует записей с аналогичным полем1, значение null в поле2 допускается.
...
Рейтинг: 0 / 0
17.08.2012, 18:20
    #37921277
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение
Мутируюзначение null в поле2 допускается.в начальной постановке этого не было.
...
Рейтинг: 0 / 0
19.08.2012, 23:08
    #37922308
Мутирую
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение
-2-Мутируюзначение null в поле2 допускается.в начальной постановке этого не было.

Комрады, мне кажется это решаемо, пока не могу понять как. Хелп!

таблица из двух полей.
Поле2 не может быть null, если в таблице есть хотя бы одна запись с таким же полем1 и полем2 не-null.
Если не существует записей с аналогичным полем1, значение null в поле2 допускается.
...
Рейтинг: 0 / 0
19.08.2012, 23:26
    #37922315
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение
Мутирую,

а как быть, когда в (поле1-поле2) вставили (1-null), а просле этого захотели вставить (1-1)?
...
Рейтинг: 0 / 0
19.08.2012, 23:33
    #37922320
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение
orawishМутируюЯ Вас понял. Спасибо за вариант, но , к сожалению, меня на "это" не подпустят.
Может есть какой то вариант с тригерами, чек-констрейнтами, пакетами ?
на триггеры забейте.
с констрейнтами - в принципе реализуемо (но, что вижу = тоже через матвью и ссылки на них)
пакеты - конечно, да. но тоже фиговато, ибо тут придётся бутылочное горло изваятьможно через афтер-стейтмент-триггеры и доп. таблицу с уникальным полем-1 - чтобы блокировать в ней строку
плюс коллекция или времянка
...
Рейтинг: 0 / 0
20.08.2012, 08:41
    #37922478
ten
ten
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение
Мутирую,
При условиях: Поле1 is not null + для каждого значения Поле1 допускается не более одной записи с Поле2 is null можно попробовать FBI.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
SQL> create table test_fbi (x number not null, y number);

Таблица создана.

SQL> create unique index test_fbi_uk on test_fbi (decode(y, null, x, null), decode(y, null, 1, null)

Индекс создан.

SQL> 
SQL> insert into test_fbi select 1, null from dual;

1 строка создана.

SQL> insert into test_fbi select 1, 2 from dual;

1 строка создана.

SQL> insert into test_fbi select 1, 2 from dual;

1 строка создана.

SQL> insert into test_fbi select 2, null from dual;

1 строка создана.

SQL> insert into test_fbi select 2, null from dual;
insert into test_fbi select 2, null from dual
*
ошибка в строке 1:
ORA-00001: нарушено ограничение уникальности (TEST.TEST_FBI_UK)


SQL> select * from test_fbi;

         X          Y
---------- ----------
         1
         1          2
         1          2
         2

...
Рейтинг: 0 / 0
20.08.2012, 08:51
    #37922484
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение
tenМутирую,
При условиях: Поле1 is not null + для каждого значения Поле1 допускается не более одной записи с Поле2 is null можно была у нас аналогичная постановка
таблица условной структуры (статья, строка)
общий смысл - по конкретной статье строки или всегда вводятся, или никогда не вводятся
так что в моем случае твой вариант явно не прокатил бы
...
Рейтинг: 0 / 0
20.08.2012, 09:44
    #37922547
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение
МутируюКомрады,
как реализовать следующие ограничение?

таблица из двух полей.

Поле2 не может быть null, если в таблице есть хотя бы одна запись с таким же полем1 и полем2 не-null.
такое допускается?
1 null
1 null
1 null

.....
stax
...
Рейтинг: 0 / 0
20.08.2012, 11:16
    #37922687
Мутирую
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничение
andreymxМутирую,

а как быть, когда в (поле1-поле2) вставили (1-null), а просле этого захотели вставить (1-1)?

Запретить вставлять!

stax..такое допускается?

1 null
1 null
1 null
.....
stax

Это ограничено constraint TABLE_UK1 unique (Поле1, Поле2)

tenМутирую,
При условиях: Поле1 is not null + для каждого значения Поле1 допускается не более одной записи с Поле2 is null можно попробовать FBI.


Спасибо, сейчас попробую.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ограничение / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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