【发布时间】:2013-10-24 04:36:20
【问题描述】:
我使用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;
【问题讨论】:
-
为什么不在查询中添加 WHERE 子句?这将使其更快并使用更少的内存。
-
不能使用 where 子句,因为当我处理大数据时,即使我有索引也需要很多时间。
-
“不能”?如果这是一个查询性能问题,那么我几乎 100% 肯定在 PL/SQL 中进行过滤不会使其更快。
-
非常感谢。将尝试再次检查 where 子句。可能是我忽略了sql查询性能。