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