假设我创建了以下域:
CREATE DOMAIN MY_STATUS AS VARCHAR NOT NULL DEFAULT 'STATUS0' CHECK(VALUE in ('STATUS1', 'STATUS2', 'STATUS3'));
正如预期的那样,在类型为MY_STATUS的列中,我只能输入值:
现在,假设我想在发送插入或更新到我的数据库之前验证此列。我需要知道允许哪些值,这样,如果我有status = STATUS4,我将在发送插件到DB之前出错,我可以管理它。由于域将来可能会发生变化,我需要从DB中选择所有允许的值,而不是硬编码所有可能的值来创建常量。
简要说明:如何进行选择域的所有可能值的查询? 在我的示例中,我想要一个将返回的查询:
'STATUS0', 'STATUS1', 'STATUS2', 'STATUS3'
答案 0 :(得分:0)
我建议您使用外键引用而不是类型或check
约束。虽然您可以设计一个复杂的查询来解析约束,但使用外键更容易:
create table valid_domain_statuses (
status varchar(32) primary key
);
insert into valid_domain_statuses (status)
select 'STATUS0' union all
select 'STATUS1' union all
select 'STATUS2' union all
select 'STATUS3' ;
. . .
alter table t add constraint fk_my_status
foreign key (status) references valid_domain_statuses(status);
这还有其他优点: