我需要从某个远程服务器获取数据,我在 Oracle 中使用 DB Link 进行连接。执行一个简单的选择查询大约需要 6 秒。
这是按某个块(约 20 行)获取数据的示例,平均执行时间约为 25 秒:
select * from external_table et where et.pk in
(select lt.pk from local_table lt where condition)
对于调用查询,我使用用 pro*c(T-Max) 编写的服务。首先,我从本地表接收数据(可能需要 20 毫秒)并local_list
使用 pro*c(for 和字符串操作)将列表创建到一些 varchar 变量中。此列表直接包含数据 fe:('001','002',...,'003','020')
然后我执行查询以从外部表中检索数据
select * from external_table et where et.pk in **local_list**
结果比原始查询快得多(6 秒)。
它工作了很长时间,但现在我需要直接在 db 中创建一些批处理作业来使用 PL/SQL 过程来做到这一点。有什么方法可以在 PL/SQL 中创建这种列表吗?或者加快原始检索查询?