【发布时间】:2011-02-01 04:05:59
【问题描述】:
我正在尝试从连接中选择一个记录子集,从 5000 到 10000。过去我曾收到过这样的查询,但它们的复杂性略低。这是我正在尝试使用的查询,如果我删除 rownum/rnum 引用(以及外部选择),我会按预期收到所有记录,所以我知道逻辑是好的。
SELECT *
FROM (
SELECT unique cl.riid_,
rownum as rnum
FROM <table 1> cl, <table 3> mil
WHERE cl.opt = 0 AND
(cl.st_ != 'QT' OR cl.st_ IS NULL) AND
cl.hh = 0 AND
cl._ID_ = mil._ID_ AND
mil.TYPE in (0, 1, 2, 3, 4) AND
EXISTS
( SELECT 'x'
FROM <table 2> sub
WHERE cl.ea_ = lower(sub.ea_) AND
sub.status = 0 AND
lower(sub.subscription) = 'partner'
) AND
rownum <= 10000
)
where rnum > 5000
因此,当我运行此查询时,我会从我们的系统收到此消息(这不是 Oracle cli 接口,而是存在于其顶部的 Web 层,因此如果它不正常,请显示错误消息)
'错误:选择查看的资源无效。在查看其数据之前,您可能需要重新创建或修复该对象。'
资源将是查询的结果。
那么有没有人知道发生了什么或更好的方法来做到这一点?
谢谢!
【问题讨论】:
-
它没有理由不工作,但没有 ORDER BY 结果集的顺序是不确定的,所以为什么不挑选前 5000 行。查询中没有任何内容可以将任何特定行放入“第二个”5000 而不是“第一个”5000。
-
您是否尝试过在 SQL Plus 中运行 SQL 而不是在您的 OO 工具中运行以查看是否正常?
-
@Gary 我忘记了 ORDER BY 哎呀!至于第二部分,我实际需要做的是编写 4 个查询。一个返回第一个 5000,然后返回下一个 5000,依此类推。因此我需要返回第二个 5K。第一个查询效果很好,只是这些第二、第三、第四组查询不起作用。
-
@Tony 很遗憾我没有能力这样做。
-
错误消息看起来不像 Oracle 消息。您使用什么工具来运行查询?