我有几个场景:
需要以预定义的顺序从三个不同的表中读取列的值,并且只有 1 个表会有数据
如果记录存在给定条件的记录,则从表 1 读取数据,否则从表 2 中读取给定条件的数据
在 Oracle 存储过程中
现在处理这些的方法是首先将给定查询的计数放入变量中,如果计数 > 0,那么我们执行相同的查询以读取实际数据,如下所示:
select count(*) from table1 into v_count
if v_count > 0
then
select data into v_data from table1
end if;
Return v_data
这样做是为了避免 no_data_found 异常,否则我需要三个异常处理程序块来捕获每个表访问的 no_data_found 异常。
目前我正在用 Cursors 重新实现它,这样我就有了这样的东西:
cursor C1 is
select data from table1;
Open C1
Fetch C1 into v_data
if C1%FOUND
then
Close C1
Return v_data
End If
我想从性能的角度找出哪一个更好 - 一个带有游标,或者一个将 Select 放入变量并具有三个 no_data_found Exception 块的那个。我不想使用我们目前拥有的两阶段查询过程。