我正在尝试创建一个具有分区可能性的表格,我希望一行中所有单元格的总和为1。 例如:
0.1, 0.2, 0.3, 0.3, 0.1
我正在尝试创建一个具有分区可能性的表格,我希望一行中所有单元格的总和为1。 例如:
0.1, 0.2, 0.3, 0.3, 0.1
create table my_table (
col1 number,
col2 number,
col3 number,
col4 number,
constraint assert_sum_is_one check (col1 + col2 + col3 + col4 = 1)
)
任何试图插入或更新不等于1的行都会导致约束违规异常。
CREATE TABLE myTable (
id NUMBER,
col1 NUMBER(3),
col1 NUMBER(3),
col3 NUMBER(3),
colsum NUMBER GENERATED ALWAYS AS (col1 + col2 + col3) VIRTUAL,
CONSTRAINT pk_mytable PRIMARY KEY (id)
);
然后添加一个约束条件来检查colsum是否总是恰好为1。
编辑:Bohemian的答案更简单、更好。在这种情况下,使用虚拟列的唯一优点是总和始终被持久化/可见,但如果约束条件防止总和不等于1,那么这并不是必需的。出于完整性考虑,我将保留此答案。