Oracle Rownum转换

3

我正在尝试创建一个复杂的视图,将通过 MS-SQL 服务器上的链接服务器进行访问。 我遇到的问题是查询使用 ROWNUM 生成 ROWID。

生成的 ROWID 具有 NUMBER 数据类型,但这显然给我带来了问题。如果我可以将其转换为 NUMBER(插入尺寸),那么一切都会很好。但我不确定这是否可能。

CREATE OR REPLACE FORCE VIEW EXAMPLE ("ROW_ID")
AS
SELECT ROWNUM ROW_ID,
FROM
(SUB-QUERY)

由于工作限制,我无法提供完整的查询和列名,但以下是在SQL Developer中查询返回的列类型:

column types

我认为问题集中在 ROWNUM 的返回数据类型为 Number 而不是 NUMBER(20) 或类似长度上,这种交叉可能导致我在关联服务器错误方面遇到的问题,如果有人知道不同,请让我知道;)


这会引起什么问题? - Gordon Linoff
Msg 7356,级别16,状态1,行1 OLE DB提供程序“MSDAORA”为链接服务器“LINKEDSERVER”提供的列元数据不一致。对象“VIEWNAME”的列“ROW_ID”(编译时序数1)在编译时报告其“DBTYPE”为130,在运行时为5。 - Deviland
2个回答

6
您可以使用cast函数:cast(rownum AS NUMBER(10)) as row_id。该函数可将rownum转换为数字类型并赋值给row_id变量。
create or replace view tvv as 
   select cast( rownum AS NUMBER(10)) as row_id 
   from all_objects 
   where rownum < 10;

> desc tvv
 Name              Null?    Typ
 ----------------- -------- ------------
 ROW_ID                     NUMBER(10)

我尝试了,但是出现了相同的错误,并抱怨ROW_ID的数据类型。我已经使用SQLDeveloper查看了返回的数据类型,结果显示数据类型没有改变,仍然设置为NUMBER:s。 - Deviland
@Deviland,你能发一下你的DML语句吗?如果你按照我的答案创建视图,SQLDeveloper中显示的数据类型是什么? - schurik
似乎即使您选择将rownum强制转换,它仍将返回NUMBER数据类型。 - Deviland

0

这并不是一个好的解决方案,但是通过删除rownum并从不同的角度解决问题,我已经消除了错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接