Sql 为什么我得到ORA-00904:确定性函数索引的标识符无效?
Sql 为什么我得到ORA-00904:确定性函数索引的标识符无效?,sql,oracle,Sql,Oracle,STATUS是ORDER表中的CHAR(1)列 为什么编译器会说IDXF是无效标识符?是Oracle中的保留字(ORDER BY子句的一部分),因此不应将其用作表的名称 从技术上讲,您可以使用双引号: create or replace function idxF(status IN char) return char deterministic is retVal CHAR(1); begin dbms_output.put_line('P'); retVal:=CASE status
STATUS
是ORDER
表中的CHAR(1)
列
为什么编译器会说IDXF是无效标识符?是Oracle中的保留字(ORDER BY子句的一部分),因此不应将其用作表的名称
从技术上讲,您可以使用双引号:
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
很可能,这个表一开始就是这样创建的
这种方法是非常有问题的,因为您需要将每个查询转义到此表中,而这并不总是可能的,特别是对于自动生成的查询
因此,不要这样做,而是重命名表
另外,我无法在此查询中重现
ORA-00904
。无效的表名导致ORA-00903:无效的表名
。转义查询对我来说很好。如果仍然存在ORA-00904
错误,则需要构建以演示您的问题(即包括CREATE TABLE
语句并指定Oracle版本)。这是您真正的功能吗<代码>dbms_输出。输入_行('P')代码>迟早会产生问题。为什么不简单地在“订单”上创建索引setIndexOnStatus(案例状态为'P'时,则为'P'时,则为'H'时,则为'H'否则为NULL END)代码>或在“订单”上创建索引setIndexOnStatus(状态为('P','H')时,则状态为NULL END)代码>?
create index setIndexOnStatus on "ORDER"(idXF(STATUS));