小编典典

Oracle LIMIT和1000列限制

sql

我有一个SQL查询,看起来像这样:

SELECT foo "c0",
       bar "c1",
       baz "c2",
       ...
FROM   some_table
WHERE  ...

为了应用限制,并且仅从该查询返回记录的子集,我使用以下包装SQL:

SELECT *
FROM   (
    SELECT t.*,
           ROW_NUMBER() OVER (ORDER BY ...) rnum
    FROM   (
        ... original SQL goes here ...
    ) t
)
WHERE rnum BETWEEN 1 AND 10

我的问题是,原始查询要在与其他表的大量联接中选择1000多个列。Oracle每个表或视图的内部限制为1000列,显然,我用来限制结果集的包装SQL正在创建一个应用了此限制的临时视图,从而导致整个操作失败。

还有另一种分页方法不会创建这样的视图,或者不会受到1000列限制的影响吗?

我对将工作分解成块,不选择> 1000列等的建议不感兴趣,因为我已经完全意识到所有这些方法。


阅读 246

收藏
2021-04-07

共1个答案

小编典典

您无法查看包含1000多个列的视图,因此请作弊一点。

select *
  from foo f, foo2 f2
 where (f.rowid, f2.rowid) in (select r, r2
                                 from (select r, r2, rownum rn
                                         from (select /*+ first_rows */ f.rowid r, f2.rowid r2
                                                 from foo f, foo2 f2
                                                where f.c1 = f2.a1 
                                                  and f.c2 = '1'
                                                order by f.c1))
                                where rn >= AAA
                                  and rownum <= BBB)


order by whatever;

现在将任何where子句放在最里面的位(例如,我将f.c1 =‘1’放入)。

BBB =页面大小。AAA =起点

2021-04-07