Ограничение Oracle в последовательности - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь создать ограничение для столбца, которое должно быть в последовательности (т. Е. col_name < seq.maxval)

Я пытался использовать обычное ограничение, но столбец не имеет ничего дляпривязать к - это просто последовательность, а не столбец в таблице.

Чеки не могут ссылаться на какие-либо запросы, поэтому я не думаю, что это также сработает.

ALTER TABLE STE_FILECOLL ADD (
  CONSTRAINT STE_FC_CLFC_REF_STEF_IDFILE
  FOREIGN KEY (CLFILECOLL) 
  REFERENCES ????
  ENABLE VALIDATE
);

Я ожидаю, что есть способ убедиться, что значения столбца находятся внутри последовательности, но час чтения документации и утилизации утечки оказался бесплодным, поэтому я перехожу к этому.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

В Oracle DB версии 12c следующее значение последовательности может быть установлено по умолчанию для столбца:

create table STE_FILECOLL
(
  col0     int default seq1.nextval not null,
  col_name int
);

, а затем могут быть добавлены проверочные ограниченияпредоставить желаемое условие как:

alter table STE_FILECOLL
  add constraint STE_CC_CLFC_REF_STEF_IDFILE
  check (col_name < col0); 
0 голосов
/ 18 февраля 2019

Единственными псевдоколонками последовательности являются nextval и currval, поэтому вы не можете использовать такой синтаксис.Встроенные ограничения довольно ограничены.Я думаю, что вам лучше всего использовать триггер.

[...]
select as.maxval into l_maxval from all_sequences where sequence_name = 'my_sequence';

if :new.col_name > l_maxval then
    raise_application_error( -20001, 'too big' );
end if;
...