为什么我得到ORA-00904:确定性函数索引的标识符无效?

时间:2018-05-23 09:00:27

标签: sql oracle

create or replace function idxF(status IN char) return char deterministic is
retVal CHAR(1);
begin
  dbms_output.put_line('P');
  retVal:=CASE status
  when 'P' then 'P'
  when 'H' then 'H'
  else null
  end  ;
  return retVal;
end idxF;
  create index setIndexOnStatus on ORDER(idXF(STATUS));

  SQL Error: ORA-00904: "IDXF": invalid identifier

STATUSCHAR(1)表中的ORDER列。

为什么编译器说IDXF是无效的标识符?

1 个答案:

答案 0 :(得分:1)

ORDER是Oracle中的保留字(ORDER BY子句的一部分),因此您不应将其用作表的名称。

从技术上讲,您可以escape a reserved word使用双引号:

create index setIndexOnStatus on "ORDER"(idXF(STATUS));

可能这个表首先是这样创建的。

这种方法非常有问题,因为您需要将每个查询都转义到此表,并不总是可行,尤其是对于自动生成的查询。

所以,不要这样,重新命名表。

P.S。我无法在此查询中重现ORA-00904。无效的表名称会导致ORA-00903: invalid table name。转义查询对我来说很好。如果您仍有ORA-00904错误,那么您需要构建a reproducible example来演示您的问题(例如,包括CREATE TABLE语句并指定Oracle版本。)