我们正在学习数据库,对于我们的情况,数据库是Oracle,在课堂上我们要求根据表中另一个字段的信息创建约束,并且应该在内部构建约束,尽管谷歌搜索量很大,但对我来说没有任何效果(我们正在研究Oracle顶级在线平台),所以我们被要求做的就是:
根据acumuladoCompra
字段和Clasification
字段执行以下操作:
如果分类为A,则acumuladocompra
必须小于$ 20,000;如果分类为E,则acumuladocompra
应介于$ 20,001和$ 40,000之间;如果分类为I,则acumuladocompra
必须大于$ 40,001但小于$ 60,000;如果分类为O,则acumuladocompra
必须小于$ 80,000但超过$ 60,001;否则它应该高达$ 100,000
那么,这怎么可能构建呢?
编辑:我试过这段代码:
alter table "CLIENTES_152" add constraint "RESTRICCIONCLASIFICA" check ( CASE when CLASIFICACION_152 = A THEN ACUMULADOCOMPRA_152 <20000;
when CLASIFICACION_152 = E THEN ACUMULADOCOMPRA_152 BETWEEN 20001 AND 40000;
when CLASIFICACION_152 = I THEN ACUMULADOCOMPRA_152 >40001 AND <60000;
when CLASIFICACION_152 = O THEN ACUMULADOCOMPRA_152 >60001 AND <80000;
when CLASIFICACION_152 = U THEN ACUMULADOCOMPRA_152 >100000; END)
但得到了
ORA-00905:缺少关键字
怎么了?
答案 0 :(得分:0)
对那些试图帮助我的人表示感谢。
现在,这个约束的最终解决方案是:
alter table "CLIENTES_152" add constraint "RESTRICCIONCLASIFICA"
CHECK (
(CASE when CLASIFICACION_152 = 'A' AND ACUMULADOCOMPRA_152 <20000 THEN 1
when CLASIFICACION_152 = 'E' AND ACUMULADOCOMPRA_152 BETWEEN 20001 AND 40000 THEN 1
when CLASIFICACION_152 = 'I' AND ACUMULADOCOMPRA_152 BETWEEN 40001 AND 60000 THEN 1
when CLASIFICACION_152 = 'O' AND ACUMULADOCOMPRA_152 BETWEEN 60001 AND 80000 THEN 1
when CLASIFICACION_152 = 'U' AND ACUMULADOCOMPRA_152 >100000 THEN 1
ELSE 0
END)=1
);
正如你所看到的,我所做的就是改变我编写案例的方式,所以这就是它的编写方式,最后它运作良好。
感谢您的提示和建议。
注意:我自己没有找到解决方案,有人告诉我查询必须构建的正确方法!