当我尝试创建基于函数的索引时,我遇到了 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/