1

我曾经 bulk collect将记录提取到嵌套表中。我想用方法搜索记录,exists但没有成功。然后我发现该exists方法使用索引并且不查找值。我是否需要遍历每条记录并搜索匹配项?是否有更短的方法可以做到这一点,因为我将对大量记录使用相同的逻辑?

bulk collect我在使用 varchar 作为键时无法正常使用关联数组的网站中阅读,因此我使用了嵌套表。此外,我不想读取每条记录并将其存储在哈希图中,因为它会降低性能。

Create table sales(
   name varchar2(100)
)
insert into sales(name) values('Test');
insert into sales(name) values('alpha');
insert into sales(name) values(null);


declare
 type sales_tab is table of varchar2(1000);
 t_sal sales_tab;
 begin
 select name bulk collect into t_sal from sales;


 if(t_sal.exists('Test')) THEN
   dbms_output.put_line('Test exists');
 END IF;

 dbms_output.put_line(t_sal.count);
end;
4

1 回答 1

3

exists()函数告诉您是否存在具有整数或 varchar2(对于 varchar2 集合索引的关联数组)索引的特定元素。它不测试成员资格。为了能够检查集合是否包含具有特定值member of条件的元素,可以使用:

SQL> declare
  2    type  sales_tab is table of varchar2(1000);
  3    t_sal sales_tab;
  4  begin
  5   select name
  6     bulk collect into t_sal
  7     from sales;
  8  
  9   if('Test' member of t_sal) THEN
 10     dbms_output.put_line('Test exists');
 11   END IF;
 12  
 13   dbms_output.put_line(t_sal.count);
 14  end;
 15  /
Test exists
3
PL/SQL procedure successfully completed
于 2013-10-24T04:57:44.103 回答