我有这张table:
XPTO_TABLE (id, obj_x, date_x, type_x, status_x)
我想创建一个唯一的约束,仅当status_x <> 5
时才应用于字段(obj_x, date_x, type_x)
。
我试着创建这个,但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));
正确的语法是什么?
4条答案
按热度按时间3ks5zfa01#
@jamesfrj:看起来你试图确保你的表只包含一条
status <>5
的记录。您可以尝试通过连接列来创建唯一的函数索引,如下所示
vnzz0bqm2#
在Oracle 11下,你可以创建一堆只有当STATUS_X为5时才获得非NULL值的虚拟列,然后使 * 它们 * 唯一:
您可以自由插入重复项,只要STATUS_X为不为5:
但是当STATUS_X为5时,尝试插入副本失败:
cotxawn73#
由于CREATEUNIQUE INDEX只需要一个值,因此可以按如下方式连接列
mjqavswn4#
如果
my_id
大于1428923
,则MY_INDEX_COLUMN
值不能重复。