oracle db中具有多个字段的条件唯一约束

Conditional unique constraint with multiple fields in oracle db(oracle db中具有多个字段的条件唯一约束)
本文介绍了oracle db中具有多个字段的条件唯一约束的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这张桌子:

XPTO_TABLE (id, obj_x, date_x, type_x, status_x)

我想创建一个唯一的约束,仅当 status_x (obj_x, date_x, type_x)5.

I wanna create a unique constraint that applies to the fields (obj_x, date_x, type_x) only when status_x <> 5.

我试图创建这个,但 Oracle 说:

I have tried to create this one but Oracle says:

line 1: ORA-00907: missing right parenthesis

CREATE UNIQUE INDEX UN_OBJ_DT_TYPE_STATUS
ON XPTO_TABLE(
    (CASE
         WHEN STATUS_X <> 5
         THEN
             (OBJ_X,
              TO_CHAR (DATE_X, 'dd/MM/yyyy'),
              TYPE_X)
         ELSE
             NULL
     END));

正确的语法是什么?

推荐答案

@jamesfrj: 看起来您正在尝试确保您的表应该只包含一条记录 status <>5.

@jamesfrj: it looks like you are trying to ensure that your table should contain only one record for which status <>5.

您可以尝试通过连接列来创建唯一的功能索引,如下所示

You can try creating a unique functional index by concatenating the columns, as given below

      create table XPTO_TABLE (id number, 
                            obj_x varchar2(20),
                            date_x date,
                            type_x varchar2(20),
                            status_x varchar2(20)                              
                           );

      create unique index xpto_table_idx1 on XPTO_TABLE(case when status_x <>'5'  THEN              obj_x||date_x||type_x||STATUS_x ELSE null END);

希望对你有帮助

维沙德

这篇关于oracle db中具有多个字段的条件唯一约束的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

SQL to Generate Periodic Snapshots from Transactions Table(用于从事务表生成定期快照的SQL)
MyBatis support for multiple databases(MyBatis支持多个数据库)
Oracle 12c SQL: Missing column Headers in result(Oracle 12c SQL:结果中缺少列标题)
SQL query to find the number of customers who shopped for 3 consecutive days in month of January 2020(查询2020年1月连续购物3天的客户数量)
How to get top 10 data weekly (This week, Previous week, Last month, 2 months ago, 3 month ago)(如何每周获取前十大数据(本周、前一周、上个月、2个月前、3个月前))
Select the latest record for an Id per day - Oracle pl sql(选择每天ID的最新记录-Oracle pl SQL)