PLSQL - 在批量收集的嵌套表中搜索记录

时间:2013-10-24 04:36:20

标签: sql oracle plsql

我使用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;

1 个答案:

答案 0 :(得分: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