Oracle - 在PLSQL中编写REST服务

问题描述 投票:0回答:2

我创建了一个REST服务(通过APEX),它利用PL / SQL构建结果集。我循环通过一个大光标并做一个sys.htp.print(my_data) - (顺便说一句,这是sys.htp.print最好的选择吗?)。基本上,我将数据字符串(一次一行)转储到http缓冲区...

我的客户端进程接收数据很好,只要数据集不是太大。例如,客户端进程可以接收大约35K行的数据集,但是更大的数据集会导致问题。

我没有为分页大小设置任何值。看来我必须实现某种类型的分页功能。我的困惑是如何用PL / SQL做到这一点。

在查看APEX帮助弹出窗口时,它指的是:row_offset:row_count变量。当我使用基于SQL的REST服务查询(而不是PL / SQL)时,我只需设置分页,并引用我想要的页码。这对PL / SQL有何不同?我是否继续使用REST服务URL(基本上为服务URL添加'page = 1'类型的扩展名)与基于SQL的服务一样? (即Source Type = Query),还是需要调整我的代码以引用:row_offset:row_count?如果是这样,因为这是基于PL / SQL的,每次调用都必须运行服务,并且只返回大于:row_offset的数据到:row_count

oracle rest plsql oracle12c
2个回答
2
投票

考虑重新处理PL / SQL以将数据作为流水线表函数返回。这允许通过像这样的查询来查询它

SELECT columns FROM TABLE(pkg.func(par=> :a)) ORDER BY...

这样它就可以处理分页,就好像它是任何其他SQL查询一样。


0
投票

在Oracle 12c中,我们在SQL中使用了新的Offset和Fetch子句。

SELECT(必需列)FROM(表)(连接/谓词)ORDER BY(必需列)OFFSET 100 ROWS FETCH NEXT 10行;

您可能需要查看OracleDocumentation以及一些代码示例here

© www.soinside.com 2019 - 2024. All rights reserved.