DB2 10.5 for Linux, UNIX, and Windows

ROWNUM 伪列

将对 ROWNUM 伪列的任何未解析和未限定列引用转换为 OLAP 规范 ROW_NUMBER() OVER()。

启用

通过将 DB2_COMPATIBILITY_VECTOR 注册表变量设置为十六进制值 0x01(位位置 1),然后停止并重新启动该实例以使新设置生效,从而启用 ROWNUM 伪列支持。
db2set DB2_COMPATIBILITY_VECTOR=01
   db2stop
   db2start

要充分利用 Oracle 应用程序的 DB2 兼容性功能部件,DB2_COMPATIBILITY_VECTOR 的推荐设置是 ORA,这将设置所有兼容性位。

ROWNUM 在结果集中对记录进行编号。符合 SELECT 语句中 WHERE 子句条件的第一个记录所给的行编号为 1,且符合相同标准的每个后续记录都会增加行号。

在子选择的 WHERE 子句中,允许使用 ROWNUM 和 ROW_NUMBER() OVER(),它们对于限制结果集的大小而言非常有用。如果在 WHERE 子句中使用 ROWNUM,并且同一个子选择包含 ORDER BY 子句,那么将在对 ROWNUM 谓词进行求值之前进行排序。同样,如果在 WHERE 子句中使用 ROW_NUMBER() OVER() 函数,并且同一个子选择包含 ORDER BY 子句,那么将在对 ROW_NUMBER() OVER() 函数求值之前进行排序。 如果在 WHERE 子句中使用 ROW_NUMBER() OVER() 函数,那么无法指定“窗口顺序子句”或“窗口分区子句”。

在将未限定的“ROWNUM”引用转换为 ROW_NUMBER() OVER() 函数之前,DB2® 会尝试将此引用解析为下列其中一项:
  • 当前 SQL 查询中的列
  • 局部变量
  • 例程参数
  • 全局变量

在 ROWNUM 伪列支持处于启用状态时,请避免将“ROWNUM”用作列名或变量名。

示例

在假定已对所连接的数据库启用 ROWNUM 伪列支持的情况下,检索临时表中存储的结果集的第 20 到 40 行。
   SELECT TEXT FROM SESSION.SEARCHRESULTS
     WHERE ROWNUM BETWEEN 20 AND 40
     ORDER BY ID
注意,ROWNUM 受 ORDER BY 子句影响。