我试图编写类似于此的查询:
DECLARE
last_run = DATE;
BEGIN
SELECT trunc(last_run_date)
INTO last_run
FROM job_log
WHERE job_name = 'test_job'
FOR data_row in
(SELECT *
FROM data_table@remote.host
WHERE creation_date between last_run AND sysdate)
LOOP
DBMS_OUTPUT.PUT_LINE(data_row.id);
END LOOP;
END;
问题是,当我运行查询时,大约需要15-30分钟才能完成。当我有一个硬编码日期代替光标中的last_run变量时,查询大约需要1-2分钟。例如:
SELECT *
FROM data_table@remote.host
WHERE creation_date between '03-AUG-2014' AND sysdate)
当我使用变量作为条件的一部分而不是硬编码时,有没有人知道为什么查询会受到这样的性能影响?
感谢您的帮助
编辑:我应该提一下' job_log'表没有通过远程数据库查询,我直接连接到它。