gpt4 book ai didi

sql - Oracle 中隐式游标和显式游标的区别

转载 作者:行者123 更新时间:2023-12-04 01:57:35 24 4
gpt4 key购买 nike

我想知道这两种说法的区别。一个比另一个“更好”吗?

DECLARE
myvar varchar2(50);
BEGIN
SELECT fieldone into myvar FROM tbl_one WHERE id = 1;
END;

DECLARE
CURSOR L1 IS
SELECT fieldone FROM tbl_one WHERE id = 1;
BEGIN
OPEN L1;
FETCH L1 INTO myvar;
CLOSE L1;
END;

最佳答案

如果没有返回行或返回多行,第一个将引发异常。如果您不处理该异常,该异常将返回给调用例程或客户端软件。这称为隐式游标。

第二个会默默地失败。如果没有返回任何行,则 myvar 将具有空值(但如果您假设它是未定义的则更可取)。如果返回多行,则仅存储第一行的值。没有 ORDER BY,哪个值是 'first' 是不确定的。这称为显式游标。

所以真正的问题是,如果找不到数据或行数过多,您希望发生什么情况。如果您确定这永远不会发生,或者不知道如何处理,请选择选项 1。

如果您确实希望只出现未找到数据的情况,则使用隐式游标,但添加异常处理程序。

如果您期望多行,则使用带有异常处理程序的隐式游标,或者如果您确实需要处理多行,则使用 BULK SELECT 或 CURSOR LOOP。

如果您要选择多个字段,定义一个显式游标并使用 %TYPE 声明来声明所有必要的变量会很有用。

从性能的角度来看,没有区别。从可维护性的角度来看,有些人喜欢他们的 SELECT 与他们的代码“内联”(因此更喜欢隐式游标)。我更喜欢我的“不碍事”,尤其是在列列表很大的情况下,所以我喜欢显式游标。

关于sql - Oracle 中隐式游标和显式游标的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3757515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com