消除 plsql 关联数组中的重复项

Cas*_*sey 4 oracle oracle11g

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

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

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

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

  • 凯西

Jus*_*ave 5

一种选择是更改关联数组的定义,以便您尝试确保唯一的值是关键。就像是

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;
Run Code Online (Sandbox Code Playgroud)

此时,您可以遍历 的键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;
Run Code Online (Sandbox Code Playgroud)

最后一步将消除非不同的条目。右侧的两个表之一也可以是空集合country_nt——这可能会更有效,但需要声明一个额外的局部变量。