Oracle 添加索引后,将不会获取全局临时表数据

Oracle 添加索引后,将不会获取全局临时表数据,oracle,indexing,oracle12c,global-temp-tables,Oracle,Indexing,Oracle12c,Global Temp Tables,需要一些帮助来确定以下问题的原因。 我创建了一个全局临时表,如下所示: Create global temporary table glo_temp_table ( row_no NUMBER not null, resource_id VARCHAR2(40), company_id VARCHAR2(20), ); 此表的数据在运行时由一个函数插入,该函数随后由另一个函数使用游标获取数据。这在功能上运行良好,没有任何问题。当

需要一些帮助来确定以下问题的原因。 我创建了一个全局临时表,如下所示:

Create global temporary table glo_temp_table
(
  row_no             NUMBER not null,
  resource_id        VARCHAR2(40),
  company_id         VARCHAR2(20),
);
此表的数据在运行时由一个函数插入,该函数随后由另一个函数使用游标获取数据。这在功能上运行良好,没有任何问题。当我在下面添加索引时,问题开始出现(以清除在运行时未执行此操作):

现在光标将不会获取任何数据。这种行为有什么具体原因吗?如何创建这样的索引才能正常工作

Oracle db veriosn是12c版本12.1.0.1.0 此表仅具有以下约束

alter table glo_temp_table
  add constraint glo_temp_table_PK primary key (ROW_NO);

需要明确的是,您是否正在创建将数据插入GTT和查询GTT之间的索引?(这是个坏主意,但您的措辞含糊不清,这可能会导致这种情况,因为DDL提交,而您的GTT默认在提交时不保留行)。或者,索引创建是否发生过一次,并且插入/查询的所有运行时调用现在都显示了此问题?索引创建只发生过一次。您能解释一下“所有插入/查询的运行时调用现在都显示了这个问题吗?”。只有使用临时表的游标有问题。好的,主要是在创建索引时。索引不应该对没有索引的查询产生任何影响,因此-只要您没有在某处添加提交或回滚,或其他DDL-您可能会遇到错误,特别是如果您使用的是非常旧的12.1.0.1的基础版本。如果你看一下新旧的执行计划,你可能会知道哪里出了问题;并且可能能够重写查询以避免问题。否则,您可能需要向Oracle提出服务请求。谢谢Alex。是的,我做的唯一改变就是添加了一个索引。所以基本上这可能是一个oracle错误。我会检查执行计划,看看是否有差异。
alter table glo_temp_table
  add constraint glo_temp_table_PK primary key (ROW_NO);