【发布时间】:2009-10-20 17:43:59
【问题描述】:
我必须从 Oracle 外部表中执行许多选择。
我有 10 个看起来很像这样的游标(ext_temp 是外部表)
CURSOR F_CURSOR (day IN varchar,code Number,orig Number)
IS
select NVL(sum(table_4.f),0)
from ext_temp table_4
where
--couple of conditions here, irrelevant for the question at hand.
AND TO_CHAR(table_4.day,'YYYYMMDD') = day
AND table_4.CODE = code
AND table_4.ORIG = orig;
而外部表大约有22659个寄存器。
我的脚本主循环是这样的
for each register in some_query: --22659 registers
open F_cursor(register.day,register.code,register.orig);
--open 9 more cursors
fetch F_cursor into some_var;
--fetch 9 more cursors, with the same structure
查询越来越多。我从here 知道我不能有任何索引或 DML。
那么,有没有办法让它跑得更快呢?我可以重写我的 plsql 脚本,但我认为我没有时间了。
更新:遗漏了一个重要细节。
我不是数据库的所有者或 DBA。那家伙不希望他的数据库中有任何额外的信息(大约 3gb 的数据),而我们可以从他那里得到的只有外部表。他不允许我们创建临时表。我不会假装质疑他的理由,但外部表不是解决这个问题的方法。所以,我们被他们困住了。
【问题讨论】:
-
听起来你被绑着双臂被扔到海里,被告知要游到岸边;-)
-
DBA 甚至不允许全局临时表?完全会话瞬态数据 - 会话结束时消失。
-
您只是对外部表进行查询,还是包含数据库中已有的数据?如果您只是使用自己的数据,我会在您的计算机上加载类似 Oracle XE 的东西并使用它。
标签: sql oracle plsql external-tables