我试图理解为什么 NVL 在直接 SELECT 中可以正常工作,但在 INDEX 中却不行。下面展示了它在创建 INDEX 之前是如何完美工作的(列 foo 是 varchar2):
SELECT id,foo FROM bar WHERE foo IS NULL;
1001
1002
SELECT id, NVL("FOO", 'null') FROM bar WHERE foo IS NULL;
1001 null
1002 null
现在我尝试创建一个 INDEX,所以我不必将 NVL 放入 SELECTS 中:
CREATE INDEX "BUZ_UTV3"."IX_NULL_FOO"
ON "BUZ_UTV3"."BAR" (NVL("FOO", 'null'))
TABLESPACE "TEST01_BUZUTV3";
但是当我重新运行原始 SELECT 时,我没有得到预期的“空”字符串:
SELECT id,foo FROM bar WHERE foo IS NULL;
1001
1002
我很可能误解了什么。您能看出 INDEX 似乎有什么问题吗?