Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么我得到ORA-00904:确定性函数索引的标识符无效?_Sql_Oracle - Fatal编程技术网

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));