当前位置: 首页 > 面试题库 >

Oracle LIMIT和1000列限制

许永年
2023-03-14
问题内容

我有一个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列等的建议不感兴趣,因为我已经完全意识到所有这些方法。


问题答案:

您无法查看包含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 =起点



 类似资料:
  • 问题内容: 可以在SQL IN子句中放置1000多个项目吗?我们一直在遇到无法处理Oracle数据库的问题。 如果是的话,我们如何在SQL IN子句中放置1000多个项目? 如果没有,我还能做什么? 问题答案: 您应该将IN子句转换为INNER JOIN子句。 您可以像这样转换查询 在另一个查询中 您还将获得很多性能

  • 拍摄图像张数/拍摄影像长度     拍摄张数/时间因 PSP™专用的摄影机(另售)型号而异。在参阅以下数据前,请先确认您使用的摄影机型号。 拍摄张数/时间之多寡亦因摄影状况而异。 - 使用PSP-300拍摄时 - 使用PSP-450拍摄时 使用PSP-300拍摄时 静止图像的拍摄张数 使用Memory Stick Duo™或Memory Stick PRO Duo™拍摄时(单位:张) 图像大小 3

  • 问题内容: 为什么用Java将24 * 60 * 60 * 1000 * 1000除以24 * 60 * 60 * 1000不等于1000? 问题答案: 因为乘法会溢出32位整数。64位还可以: 显然,在乘法溢出之后,除法不会“撤消”该溢出。

  • 我在HTC DESIRE 626GPlus双SIM卡和Android 4.4.2上得到了这个错误

  • 问题内容: 今天,我遇到了一个很奇怪的问题。我需要计算数字的字符串长度,所以我想出了这个解决方案 这是基于数学公式 10 n n(在这里解释) 但是我发现在C语言中 是 不是 等于 但应该如此。 我什至用这段代码在Java中尝试了同样的事情 但它的行为方式相同。 故事还在继续。执行此代码后 我懂了 因此,该错误似乎发生在每1000个倍数上。 我向我的C老师展示了这一点,他说这可能是由于日志分割期间

  • 问题内容: 好的,我正在做Euler项目的挑战,我简直不敢相信我会遇到第一个挑战。尽管我的代码看起来很正常,但我真的看不到为什么我得到错误的答案: 我得到的答案是266333,它说错了… 问题答案: 您应该对两者都使用相同的for循环,以避免重复计算两者的倍数。例如15,30 …