簡體   English   中英

序列中的Oracle約束

[英]Oracle constraint within a sequence

我正在嘗試在列上創建一個必須在序列中的約束(即col_name < seq.maxval

我試圖使用常規約束,但該列沒有任何東西要綁定 - 它只是一個序列,而不是表中的列。

檢查不能引用任何類型的查詢,所以我認為這也不會起作用。

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

我希望有一種方法可以確保列的值在一個序列中,但是一小時的閱讀文檔和duckduckgoing沒有結果,所以我轉到這里。

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); 

唯一的序列偽列是nextvalcurrval ,因此您不能使用這種語法。 內聯約束非常有限。 我認為你最好的選擇是使用觸發器。

[...]
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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM