我有一个如下所示的 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 对每个表或 View 有 1000 列的内部限制,显然我用来限制结果集的包装 SQL 正在创建应用此限制的临时 View ,导致整个事情失败。
是否有另一种分页方法不会创建这样的 View ,或者不会受到 1000 列限制的影响?
我对将工作分成 block 、不选择 > 1000 列等的建议不感兴趣,因为我已经完全了解所有这些方法。
最佳答案
好吧,这会比你计划的更糟糕,但我的意思是你可以尝试这样分页:
WITH CTE AS
(
... original SQL goes here ...
)
SELECT A.*
FROM CTE A
INNER JOIN (SELECT YourKey,
ROW_NUMBER() OVER (ORDER BY ...) rnum
FROM CTE) B
ON A.YourKey = B.YourKey
WHERE rnum BETWEEN 1 AND 10;
关于sql - Oracle LIMIT 和 1000 列限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13314868/