加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle Ref Cursor Vs选择进入异常处理

发布时间:2021-01-08 02:23:05 所属栏目:站长百科 来源:网络整理
导读:我有几个场景: 需要以预定义的顺序从三个不同的表中读取列的值,并且只有一个表将具有该数据 如果给出的标准存在记录,则从table1读取数据,否则从表2中读取给定标准的数据 在Oracle存储过程中 现在处理这些的方法是首先将给定查询的计数变为变量,如果计数 0,

我有几个场景:

>需要以预定义的顺序从三个不同的表中读取列的值,并且只有一个表将具有该数据
>如果给出的标准存在记录,则从table1读取数据,否则从表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异常.

目前我正在用游标重新实现这一点,所以我有这样的东西:

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

我想从性能的角度找出哪一个更好 – 一个是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;

我相信这会比你的其他解决方案表现得更好,因为它尽可能少地完成所需的工作.

请参阅How bad is ignoring Oracle DUP_VAL_ON_INDEX exception?,其中我演示使用异常比计数更好,以查看是否有任何数据.

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读