【发布时间】:2019-11-23 14:44:49
【问题描述】:
我有一个返回大量数据的查询。当用户在更大的日期范围内搜索数据时,它可能会出现多达 500 万条记录,并且当这种情况发生时,应用程序会冻结一定的时间。
所以我决定对查询结果进行分页,但我试图在不更改任何数据库的情况下这样做。让我解释一下:
我有一个使用动态 SQL 检索所有数据的存储过程。输入参数为3:
- 选择案例数的 Varchar(用于选择应执行的选择),
- 和 2 个其他 Varchar 参数,用于选择查询的字段和条件,换句话说 - FROM 之前的一个和 WHERE 子句之后的一个。 这两个参数在这个问题中很重要。
例如,我调用查询的过程如下所示:
first_parameter || ' FROM (...这是我的查询,其中所有可能的字段都通过连接、数据库链接等选择...) WHERE ' || second_parameter
所以,我可以修改查询的开始和结束,现在我想修改它以启用分页,假设一次最多 1.000 条记录。
我尝试在 C# 中通过在 first_parameter 中添加 rownum 以及选定的字段来修改它
(选择rownum、field1、field2等...)
,并使用
rownum 在 WHERE 子句中
。这实际上可行,但是对于分页,我还需要告诉开始和结束的行,例如
WHERE rownum > 1000 AND rownum
,但这不起作用。
我如何在 Oracle 11g 中执行此操作,其中 OFFSET 不可用,有人可以告诉我吗?如果可能的话,我更喜欢不更改参数内部查询的解决方案,因为我可以将我想要的所有内容从代码中的 C# 发送到有问题的两个参数中(当然是 Varchar 值)。
附: : 我从来没有做过分页,如果我写了一些愚蠢的东西,请原谅我;)
【问题讨论】:
标签: oracle dynamic-sql