我想避免在 plsql 关联数组中存储重复值。例如:在循环中处理和添加值时,如果数组已包含元素值,则不应存储该值,因为该元素已存在于 plsql 表中。
例如:如果数组在循环处理期间存储了单词 USA,那么如果条件变得使得 USA 再次成为循环的下一次迭代中的答案,则不应存储它,因为它已经存在。
同样,如果 GER 不存在(同样,基于某些查找),那么它会第一次被存储,但随后不会被存储。
我尝试查找“存在”,但它需要参数元素编号/位置,否则我的使用可能是错误的。有没有办法在存储之前检查整个集合并确定某个值是否存在?
一种选择是更改关联数组的定义,以便您尝试确保唯一的值是关键。就像是
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
——这可能会更有效,但需要声明一个额外的局部变量。