几天前,在一次采访中,我被问到select * from [table_name]是否是一个光标,因为它一次获取多个记录?
如果是,那么是哪种类型?显式还是隐式?为什么?
拜托,如果有人能详细说明这一点,那将是一个很大的帮助。
发布于 2017-10-31 07:10:57
Oracle在内部创建一个游标来服务select查询,因此我们称之为隐式游标。
然而,我们将下面的游标称为显式游标,这是您自己创建的,以便有更多的控件。
CURSOR cur IS SELECT col FROM table WHERE condition;
发布于 2017-11-02 16:52:25
是的,每个查询都代表一个游标。
“概念指南”将光标链接到https://docs.oracle.com/database/121/CNCPT/glossary.htm#GUID-4B296BAF-BAC8-4DE7-8128-464F4BA3C366,并将其定义为
内存中保存被解析语句和其他用于处理的信息的区域。私有SQL区域包含数据,例如绑定变量值、查询执行状态信息和查询执行工作区。
隐式游标是由PL/SQL构造和管理的会话游标。每次运行SELECT或DML语句时,PL/SQL都会打开隐式游标。
和
显式游标是您构造和管理的会话游标。您必须声明和定义一个显式游标,给它一个名称,并将它与一个查询相关联(通常,查询返回多行)。
这些都是PL/SQL中的概念,所以我不确定将它们用于其他客户端的游标是否有意义,例如SQL*Plus或SQL Developer命令行或Java程序。如果在某些PL/SQL代码中使用cursor关键字命名游标,则游标只有“显式”,而且由于您没有(也不能)对命令行中的查询进行命名,所以它更接近于隐含游标的PL/SQL概念。
https://stackoverflow.com/questions/47029535
复制相似问题