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

我有这张桌子:
XPTO_TABLE (id,obj_x,date_x,type_x,status_x)

我想创建一个唯一的约束,仅当status_x<>时才应用于字段(obj_x,type_x). 5.

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

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:看起来您正在尝试确保您的表只包含一个状态为<> 5的记录.

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

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

希望能帮助到你

Vishad

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03