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

Oracle 表函数和流水线表函数中的排序顺序

ASKTOM 2019-01-21
273

问题描述

嘿,
假设有一个函数返回带有100.000记录的数值集合。rownum伪列是否总是具有与column_value伪列相同的值?TF和PTF有区别吗?并行性呢?

示例代码:

create or replace type number_tabtyp as table of number;
/
create or replace function manyrows return number_tabtyp authid definer is
  l_out number_tabtyp:=number_tabtyp();
begin
  l_out.extend(100000);
  for i in 1..100000 loop
 l_out(i):=i;
  end loop;
  return l_out;
end manyrows;
/
select rownum, column_value from table(manyrows);
复制

专家解答

数据库将rownum分配给在where子句中存活的行。

因此,rownum <> column_value的简单示例是您过滤掉其他所有column_value的示例。E。g。所有奇数:

create or replace type number_tabtyp as table of number;
/
create or replace function manyrows return number_tabtyp authid definer is
  l_out number_tabtyp:=number_tabtyp();
begin
  l_out.extend(10);
  for i in 1..10 loop
    l_out(i):=i;
  end loop;
  return l_out;
end manyrows;
/

select rownum, column_value from table(manyrows)
where  mod ( column_value, 2 ) = 0 ;

ROWNUM   COLUMN_VALUE   
       1              2 
       2              4 
       3              6 
       4              8 
       5             10 
复制

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论