【发布时间】:2010-09-30 13:54:59
【问题描述】:
所以我有一个处理 ID 列表的 for 循环,并且有一些相当复杂的事情要做。不涉及所有丑陋的细节,基本上是这样的:
宣布 l_selected APEX_APPLICATION_GLOBAL.VC_ARR2; ……剪…… 开始 -- 获取列表ID l_selected := APEX_UTIL.STRING_TO_TABLE(:P4_SELECT_LIST); -- 在一个很好的循环中处理每个 FOR i IN 1..l_selected.count 环形 - 做一些数据检查的东西...... -- 在这里我们将寻找重复的条目,所以如果发现重复我们可以 noop 开始 从 org_county_accountable 中选择county_id 到v_dup_check 其中organization_id = :P4_ID AND County_id = v_county_id; - 下一个;!不;!但没有下一个! 当 NO_DATA_FOUND THEN 时出现异常 dbms_output.put_line('没有找到副本,继续'); 结尾; -- 这里有我们只想在没有欺骗的情况下执行的代码 如果 v_dup_check 为空 那么 -- 如果不是重复记录,请继续... 别的 -- 重置重复检查变量 v_dup_check := NULL; 结尾; 结束循环; 结尾;我通常如何处理这个问题是通过选择一个值,然后将以下代码包装在 IF 语句中检查以确保重复检查变量为 NULL。但这很烦人。我只想说NEXT;或 NOOP;或者其他的东西。特别是因为我已经必须捕获 NO_DATA_FOUND 异常。我想我可以给 Oracle 写一封信,但我很好奇其他人是如何处理这件事的。
我也可以将它包装在一个函数中,但我正在寻找更清洁/更简单的东西。
【问题讨论】:
-
很高兴看到其他人在使用 APEX!
-
APEX 摇滚,伙计 ;-) forums.oracle.com 上的论坛真的很有帮助。
-
在您的问题以及 tuinstoel 和 Pourquoi 的解决方案中,您在 FOR 循环的每次迭代中都执行了一个额外的 SQL 查询(以及与 PL/SQL 的上下文切换)......这不一定便宜的。如果性能是一个问题,最好在单个查询中预先删除所有重复。
-
jimmyorr,这是一个非常好的观点,先生。
标签: oracle plsql controls for-loop