我想避免在plsql关联数组中存储重复值。 例如:在循环中处理和添加值时,如果数组已经包含元素值,则不应该存储该值,并认识到plsql表中已存在此元素。
例如:如果数组在循环处理期间存储了单词USA,那么如果条件变为使得USA再次成为循环的下一次迭代中的答案,则它不应该存储,因为它已经存在。 / p>
同样,如果GER不存在(再次,基于某些查找),那么它将首次存储,但不会随后存储。
我尝试查找"存在",但是它需要一个参数元素编号/位置,或者我的用法可能是错误的。有没有办法在存储之前检查整个集合并确定某个值是否存在?
答案 0 :(得分:3)
一种选择是更改关联数组的定义,以便您尝试确保的值是唯一的关键。像
这样的东西DECLARE
TYPE country_aat IS TABLE OF boolean
INDEX BY varchar2(3);
l_countries country_aat;
BEGIN
FOR i IN (<<query that returns country codes>>)
LOOP
l_countries( i.country_code ) := true;
END LOOP;
此时,您可以遍历l_countries
的密钥,查看找到的不同国家/地区代码。
另一种选择是使用嵌套表并使用MULTISET
操作。例如
DECLARE
TYPE country_nt IS TABLE OF varchar2(3);
l_countries country_nt;
BEGIN
<<populate l_countries>>
l_countries := l_countries MULTISET INTERSECT DISTINCT l_countries;
END;
最后一步将消除非不同的条目。两个右表中的一个也可能是country_nt
的空集合 - 这可能更有效但需要声明一个额外的局部变量。