带有两个标识符的Oracle条件索引

jef*_*eff 4 oracle indexing

是否可以在两列上创建条件索引?

CREATE UNIQUE INDEX idx_dup_wfc
    ON WF_WORKFLOW_CLASS (CASE WHEN is_active = 1
      THEN (NAME, DEPT_OWNER)
         ELSE NULL
      END)
Run Code Online (Sandbox Code Playgroud)

ORA-00906: missing left parenthesis然而,返回以下工作

CREATE UNIQUE INDEX idx_dup_wfc
    ON WF_WORKFLOW_CLASS (CASE WHEN is_active = 1
      THEN NAME
         ELSE NULL
      END)
Run Code Online (Sandbox Code Playgroud)

Ton*_*ews 6

是的,但您必须按列执行CASE:

CREATE UNIQUE INDEX idx_dup_wfc
    ON WF_WORKFLOW_CLASS 
     (CASE WHEN is_active = 1 THEN NAME END
     ,CASE WHEN is_active = 1 THEN DEPT_OWNER END
     )
Run Code Online (Sandbox Code Playgroud)

(代码中的ELSE是多余的).