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
STATUS
是CHAR(1)
表中的ORDER
列。
为什么编译器说IDXF是无效的标识符?
答案 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版本。)