[英]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);
唯一的序列伪列是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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.