从plsql关联数组中删除重复项

时间:2014-08-21 20:03:18

标签: oracle oracle11g

我想避免在plsql关联数组中存储重复值。 例如:在循环中处理和添加值时,如果数组已经包含元素值,则不应该存储该值,并认识到plsql表中已存在此元素。

例如:如果数组在循环处理期间存储了单词USA,那么如果条件变为使得USA再次成为循环的下一次迭代中的答案,则它不应该存储,因为它已经存在。 / p>

同样,如果GER不存在(再次,基于某些查找),那么它将首次存储,但不会随后存储。

我尝试查找"存在",但是它需要一个参数元素编号/位置,或者我的用法可能是错误的。有没有办法在存储之前检查整个集合并确定某个值是否存在?

  • 凯西

1 个答案:

答案 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的空集合 - 这可能更有效但需要声明一个额外的局部变量。