暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle ORA-02070: 在这种情况下,数据库不支持rowid

ASKTOM 2020-07-29
665

问题描述

我们有一个从11g迁移Oracle 19C的业务案例,在迁移到工程环境后,我们的一个批处理作业失败,出现以下错误。

ORA-02070: database  does not support ROWIDs in this context


现有的查询在我们的业务逻辑是使用rowid的order by子句与ref游标关联,如果我们从排序中删除rowid查询工作,但相同的查询工作没有任何问题在11g。
我们在表中没有任何其他可靠的列进行排序,我们尝试没有rowid,结果输出不正确。

示例sql片段:

select * from table 
(test_pgk.transform_test 
(cursor 
( 
select code,text from test_1 t order by code,rowid 
)))


您可以在livesql中参考更多详细信息

非常感谢您的快速帮助。

专家解答

我不确定您如何在11g中使用此功能。

剥离下来到11.2.0.4中的光标表达式给我:

create table test_1 (code number, text varchar2(100));
insert into test_1 values (1,'t1');
insert into test_1 values (2,'t2');
insert into test_1 values (3,'t3');

select * from v$version;

BANNER                                                                         
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production    
PL/SQL Release 11.2.0.4.0 - Production                                          
CORE 11.2.0.4.0 Production                                                      
TNS for Linux: Version 11.2.0.4.0 - Production                                  
NLSRTL Version 11.2.0.4.0 - Production  

select     
  cursor  ( 
      select code,text
      from   test_1 t 
      order by code, rowid 
    ) 
from dual;

ORA-03001: unimplemented feature
ORA-02070: database  does not support ROWIDs in this context


关键错误是第一个错误:ORA-03001: unimplemented feature。似乎不支持rowid在光标表达式中的排序!如果您坚持这样做,则需要在支持下进行此操作才能添加。

一般来说,rowid的订购是不安全的。各种操作可以更改行的rowid,因此不能保证每次都以相同的顺序为您提供行。

We don't have any other reliable column in the table for the sorting

表上没有主/唯一键吗?

为了确保始终以相同的顺序获取行,将PK/UC列添加到排序的末尾将确保所有内容以相同的顺序返回。

如果您的表没有PK/UC... 无论如何,您可能还有更大的事情要担心。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论