【问题标题】:Oracle Rownum castOracle Rownum 演员表
【发布时间】:2012-08-14 18:25:53
【问题描述】:

我正在尝试创建一个复杂的视图,该视图将通过 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 中查询返回的列类型

我认为问题的中心是返回的 ROWNUM 数据类型是 Number 而不是 NUMBER(20) 或类似长度,并且这种交叉是我在链接服务器错误方面看到的问题,但如果有人知道不同让我知道;)

【问题讨论】:

  • 这是什么问题?
  • Msg 7356,级别 16,状态 1,第 1 行链接服务器“LINKEDSERVER”的 OLE DB 提供程序“MSDAORA”为列提供了不一致的元数据。据报道,对象“VIEWNAME”的列“ROW_ID”(编译时序号 1)在编译时的“DBTYPE”为 130,在运行时为 5。

标签: sql oracle rownum


【解决方案1】:

你可以使用cast函数:cast( rownum AS NUMBER(10)) as 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 的 DataType 我已经使用 SQLDeveloper 查看了返回的数据类型,这表明数据类型没有改变并且仍然设置为 NUMBER :s
  • @Deviland 你能发布你的 dml 声明吗?如果您根据我的回答创建视图,SQLDeveloper 中会显示什么数据类型?
  • 看来,即使您选择强制转换 rownum,它仍然会返回 NUMBER 数据类型。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-02-26
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2014-04-05
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多