Din*_*nne 3 oracle plsql cursor
我有几个场景:
需要以预定义的顺序从三个不同的表中读取列的值,并且只有一个表将具有该数据
如果给出的标准存在记录,则从table1读取数据,否则从表2中读取给定标准的数据
在Oracle存储过程中
现在处理这些的方法是首先将给定查询的计数变为变量,如果count> 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
Run Code Online (Sandbox Code Playgroud)
这样做是为了避免no_data_found异常,否则我需要三个异常处理程序块来捕获每个表访问的no_data_found异常.
目前我正在用游标重新实现这个,所以我有这样的东西:
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
Run Code Online (Sandbox Code Playgroud)
我想从性能的角度找出哪一个更好 - 一个是Cursors,另一个是选择变量并且有三个no_data_found异常块.我不想使用我们目前的两阶段查询过程.
我不知道为什么你如此热衷于避免异常?出什么问题了:
begin
begin
select data into v_data from table1;
exception
when no_data_found then
begin
select data into v_data from table2;
exception
when no_data_found then
begin
select data into v_data from table3;
exception
when no_data_found then
v_data := null;
end;
end;
end;
return v_data;
end;
Run Code Online (Sandbox Code Playgroud)
我相信这会比你的其他解决方案表现得更好,因为它尽可能少地完成所需的工作.
请参阅忽略Oracle DUP_VAL_ON_INDEX异常有多糟糕?我在这里证明使用异常比计算是否有任何数据更好.
| 归档时间: |
|
| 查看次数: |
23026 次 |
| 最近记录: |