【问题标题】:functional based index not works in oracle 12c基于功能的索引在 oracle 12c 中不起作用
【发布时间】:2021-01-10 17:48:56
【问题描述】:

我在尝试创建基于函数的索引时遇到了 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 throwed。 这是我所做的:

    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 为空,则应抛出违反唯一约束的异常。 感谢您的关注,对于可能重复的问题,我们深表歉意。

【问题讨论】:

  • 这里的所有作品dbfiddle.uk/… 请您添加您的数据库版本详细信息...
  • oracle DB 版本为 12c 1.2

标签: sql oracle


【解决方案1】:

我不知道为什么,但问题不在 DBMS 中,而在我的客户端。我正在使用 DBeaver community 7.2.0 如果在此客户端中运行脚本,您将获得 ORA-02158: invalid CREATE INDEX 选项。我用 jetbrains DataGrip 试了一下,效果很好。

【讨论】:

    猜你喜欢
    • 2015-07-02
    • 2021-07-28
    • 2017-10-10
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2017-06-23
    • 2015-07-05
    • 1970-01-01
    相关资源
    最近更新 更多