约束条件 Oracle
Case on constraint Oracle
我们正在学习数据库,对于我们的案例,数据库是 Oracle,在 class 中,我们被要求根据 table 上另一个字段的信息创建约束,并且约束应该在内部构建一个案例,尽管进行了大量 google 搜索,但对我来说没有任何效果(我们在 apex Oracle 在线平台上工作),所以我们被要求做的是:
基于 acumuladoCompra
字段和 Clasification
字段执行以下操作:
如果 class化验是 A,则 acumuladocompra
必须少于 20,000 美元;如果 classification 是 E,则 acumuladocompra
应该在 $20,001 到 $40,000 之间;如果 classification 是 I,则 acumuladocompra
必须大于 $40,001 但小于 $60,000;如果 class化验为 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: missing keyword
怎么了?
感谢那些试图帮助我的人。
现在,此约束的最终解决方案是:
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
);
正如你所看到的,我所做的是改变我写案例的方式,所以这是可以写的方式,最后效果很好。
感谢您的提示和建议。
注意:我还没有自己找到解决方案,有人告诉我必须构建查询的正确方法!
我们正在学习数据库,对于我们的案例,数据库是 Oracle,在 class 中,我们被要求根据 table 上另一个字段的信息创建约束,并且约束应该在内部构建一个案例,尽管进行了大量 google 搜索,但对我来说没有任何效果(我们在 apex Oracle 在线平台上工作),所以我们被要求做的是:
基于 acumuladoCompra
字段和 Clasification
字段执行以下操作:
如果 class化验是 A,则 acumuladocompra
必须少于 20,000 美元;如果 classification 是 E,则 acumuladocompra
应该在 $20,001 到 $40,000 之间;如果 classification 是 I,则 acumuladocompra
必须大于 $40,001 但小于 $60,000;如果 class化验为 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: missing keyword
怎么了?
感谢那些试图帮助我的人。
现在,此约束的最终解决方案是:
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
);
正如你所看到的,我所做的是改变我写案例的方式,所以这是可以写的方式,最后效果很好。
感谢您的提示和建议。
注意:我还没有自己找到解决方案,有人告诉我必须构建查询的正确方法!