我正在寻找更有效的方式来循环PLSQL。PLSQL中更高效的循环
要求:想象我有BudgetTable & RuleSet表。 规则集看起来是这样的:
acc | loc | proj || rule1 | tag1 | prio
A1% | L1% | P2% || direct | all | 90
A12% | L12% | P23% || spread | alloc | 50
第3列是低于BudgetTable键where子句,并存储在列的其余..
A123 | L123 | P234
A199 | L199 | P299
和被拾起的记录对于每次循环迭代
LOOP1:(A1%| L1%| P2%||直接|全部| 90)
A123 | L123 | P234 || direct | all | 90
A199 | L199 | P299 || direct | all | 90
loop2:(A12%| L12%| P22%||传播| alloc | 50)
A123 | L123 | P234 || spread | alloc | 50
我做了最直接的方法,通过遍历RuleSet表。
(pseudocodes)
FOR r in (select acc,loc,proj,rule1,tag1,prio from RuleSet)
LOOP
INSERT INTO ResultTable
select [columns, rule, tag1,prio ]
from BudgetTable
where acc like r.acc
and loc like r.loc
and proj like r.proj
;
END LOOP;
我在寻找更好的方法来做到这一点。问题是RuleSet可以包含数千条规则,因此通过逐个匹配记录的迭代可能会很漫长。我想知道是否有可能打破几个并行流中的循环&同时运行它们.. 感谢您的输入..
感谢名单的所有谁回答.. ,我能够来测试方法。 (1)与for循环(2)交叉连接。好奇地,与预算表abt 10Mil行,规则约100k,我原来的方法与循环更快。 我的理论是,当处理大量的行时,oracle不得不交换/溢出到它的重做日志中(或者是归档日志?)。 – handitri