sql - 基于函数的索引在 Oracle 12c 中不起作用

标签 sql oracle

当我尝试创建基于函数的索引时,我遇到了 oracle 12c 的问题。 所以我有一个像这样的表:

CREATE TABLE test_table(
    id integer PRIMARY KEY,
    delete_date DATE,
    msisdn varchar(20)
);

如果delete_date 为空,则msisdn 应是唯一的。 我找到了解决方案here ,但是当我尝试时,抛出 ORA-02158: invalid CREATE INDEX option 。 这是我所做的:

    CREATE UNIQUE INDEX test_table_msisdn_index 
ON test_table(CASE WHEN delete_date IS NULL THEN msisdn end);

CREATE UNIQUE INDEX test_table_msisdn_index 
ON test_table(CASE WHEN delete_date IS NULL THEN msisdn ELSE NULL end);

还有很多来源,例如 this说可以使用 case 语句,但对我来说它不起作用。如何以不同的方式实现这个逻辑?请注意,如果插入重复的 msisdn 并且 delete_date 为 null,则应抛出违反唯一约束的异常。 感谢您的关注,并对可能重复的问题表示歉意。

最佳答案

我不知道为什么,但问题不在 DBMS 中,问题在我的客户端中。我正在使用 DBeaver 社区 7.2.0,如果在此客户端中运行脚本,您将收到 ORA-02158:无效的 CREATE INDEX 选项。我用 jetbrains DataGrip 尝试过,它有效。

关于sql - 基于函数的索引在 Oracle 12c 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64046378/

相关文章:

sql - 在 Oracle 中,[select * from table()] 是什么意思?

Oracle - 分组集和流水线表函数(预期 NUMBER 获得 ROW)

mysql - 我怎样才能用2个表进行这个MYSQL查询

sql - 如何计算 Oracle 数据库中的百分比增加/减少?

php - 获取刚刚使用 MySQL 插入的行的自动编号 ID

SQL Server 如果不存在则插入

sql - Oracle - 根据条件更新一列或另一列

sql - 如何使用查询 array_agg 制作此 sql?

java - 如何检查数据库是否以只读模式运行?

sql - Oracle 错误 ORA-00971