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

Oracle Ref Cursor Vs选择进入异常处理,第1张

概述我有几个场景: >需要以预定义的顺序从三个不同的表中读取列的值,并且只有一个表将具有该数据 >如果给出的标准存在记录,则从table1读取数据,否则从表2中读取给定标准的数据 在Oracle存储过程中 现在处理这些的方法是首先将给定查询的计数变为变量,如果计数>> 0,然后我们执行相同的查询来读取实际数据,如: select count(*) from table1 into v_countif 我有几个场景:

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

在Oracle存储过程中

现在处理这些的方法是首先将给定查询的计数变为变量,如果计数>> 0,然后我们执行相同的查询来读取实际数据,如:

select count(*) from table1 into v_countif v_count > 0then    select data into v_data from table1end if;Return v_data

这样做是为了避免no_data_found异常,否则我需要三个异常处理程序块来捕获每个表访问的no_data_found异常.

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

cursor C1 is    select data from table1;Open C1Fetch C1 into v_dataif C1%FOUNDthen    Close C1    Return v_dataEnd 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?,其中我演示使用异常比计数更好,以查看是否有任何数据.

总结

以上是内存溢出为你收集整理的Oracle Ref Cursor Vs选择进入异常处理全部内容,希望文章能够帮你解决Oracle Ref Cursor Vs选择进入异常处理所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1157949.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存