oracle ic4 收入,Oracle 2属性CHECK约束问题

您有尾随逗号就在年底,和一个太多闭幕括号:

...84))),);

除非你在发布前切出来的东西,这可能是这种情况作为错误引用第23行(但是希望不是,因为它是棘手的看到在代码中的一个问题,你不能看到在所有)。如果变成你有什么编译:

...84)));

但条件是错误的,无论如何,正如其他人指出。你想要得到的结果,我认为的一种方法是:

...

CONSTRAINT IC4 CHECK (classification != 'junior' OR hours BETWEEN 55 AND 84)

);

的OR意味着当classification为'junior',和任何其他classification不受限制的hours检查仅适用。 (如果您需要针对不同分类的不同规则,请查看the very similar question Chris Saxon链接到评论中)。

随着一些测试数据:

insert into students values (1, 'A', 'junior', 54, 1, 1); -- ORA-02290

insert into students values (2, 'B', 'junior', 55, 1, 1); -- OK

insert into students values (3, 'C', 'junior', 84, 1, 1); -- OK

insert into students values (4, 'D', 'junior', 85, 1, 1); -- ORA-02290

insert into students values (5, 'E', 'senior', 54, 1, 1); -- OK

insert into students values (6, 'F', 'senior', 55, 1, 1); -- OK

insert into students values (7, 'G', 'senior', 84, 1, 1); -- OK

insert into students values (8, 'H', 'senior', 85, 1, 1); -- OK

select * from students order by id;

ID NAME CLASSIFICATION HOURS GPA MENTOR

---- ---------- -------------- ----- --- ------

2 B junior 55 1.00 1

3 C junior 84 1.00 1

5 E senior 54 1.00 1

6 F senior 55 1.00 1

7 G senior 84 1.00 1

8 H senior 85 1.00 1

6 rows selected

BETWEEN是包容性的,所以这是一样的:

CONSTRAINT IC4 CHECK (classification != 'junior' OR (hours >= 55 AND hours <= 84))

您还可能希望在classification检查约束,特别是因为这种约束的情况下现在敏感;或者最好有一个单独的classification表,并对此表中的列有一个外键约束。但这可能超出了你对这项任务的控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值