关于约束的案例Oracle

时间:2016-03-28 03:01:56

标签: database oracle constraints oracle-apex check-constraints

我们正在学习数据库,对于我们的情况,数据库是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:缺少关键字

怎么了?

1 个答案:

答案 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
); 

正如你所看到的,我所做的就是改变我编写案例的方式,所以这就是它的编写方式,最后它运作良好。

感谢您的提示和建议。

注意:我自己没有找到解决方案,有人告诉我查询必须构建的正确方法!