首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >序列中的Oracle约束

序列中的Oracle约束
EN

Stack Overflow用户
提问于 2019-02-18 19:48:55
回答 2查看 678关注 0票数 1

我试图在列上创建一个约束,该约束必须位于序列(即col_name < seq.maxval)中。

我尝试使用一个常规约束,但是该列没有什么可绑定的--它只是一个序列,而不是表中的一个列。

检查不能引用任何类型的查询,所以我认为这也是行不通的。

代码语言:javascript
复制
ALTER TABLE STE_FILECOLL ADD (
  CONSTRAINT STE_FC_CLFC_REF_STEF_IDFILE
  FOREIGN KEY (CLFILECOLL) 
  REFERENCES ????
  ENABLE VALIDATE
);

我希望有一种方法可以确保列的值在一个序列内,但是一个小时的阅读文档和duckduckgoing都是徒劳无功的,所以我转到这里。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-19 08:59:33

Oracle DB version 12c__中,序列的下一个值可以设置为列的默认值:

代码语言:javascript
复制
create table STE_FILECOLL
(
  col0     int default seq1.nextval not null,
  col_name int
);

然后,可以添加check约束以提供所需的条件,如下所示:

代码语言:javascript
复制
alter table STE_FILECOLL
  add constraint STE_CC_CLFC_REF_STEF_IDFILE
  check (col_name < col0); 
票数 2
EN

Stack Overflow用户

发布于 2019-02-18 20:54:22

唯一的序列伪of是nextvalcurrval,所以不能使用这种语法。内联约束非常有限。我想你最好的办法就是用扳机。

代码语言:javascript
复制
[...]
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54754360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档