Conditional unique constraint with multiple fields in 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中具有多个字段的条件唯一约束的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:oracle db中具有多个字段的条件唯一约束
- SQL 临时表问题 2022-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- 更改自动增量起始编号? 2021-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01