几天前我在面试时被询问select * from [table_name]
是否是游标,因为它一次取出一些记录?
如果是,则选择哪种类型? 明确或隐含以及为什么?
如果有人能详细说明,那将是一个很大的帮助。
答案 0 :(得分:3)
Oracle在内部创建了一个游标来为您的select查询提供服务,因此我们将其称为IMPLICIT游标。
我们将以下内容称为您自己创建的显式游标,以便对其进行更多控制。
CURSOR cur IS SELECT col FROM table WHERE condition;
答案 1 :(得分:1)
显式游标是明确打开,获取数据,关闭的游标。
如上所述,游标的使用有两部分:
光标的定义可以是
CURSOR c IS SELECT col1,col2 FROM table_name
或
FOR i IN(SELECT col1,col2 FROM table_name)
接下来会出现差异:
OPEN,FETCH,EXIT WHEN,CLOSE
结论是,SELECT语句是一个隐式游标。
最佳, Mikcutu。
答案 2 :(得分:1)
是的,每个查询代表一个游标。
概念指南从游标链接到private SQL area,它定义为
内存中包含已解析语句和其他待处理信息的区域。私有SQL区域包含绑定变量值,查询执行状态信息和查询执行工作区等数据。
隐式游标是由PL / SQL构造和管理的会话游标。每次运行SELECT或DML语句时,PL / SQL都会打开一个隐式游标。
和
显式游标是您构建和管理的会话游标。您必须声明并定义显式游标,为其指定名称并将其与查询相关联(通常,查询返回多行)。
这些是来自PL / SQL的概念,因此我不确定将它们用于其他客户端(如SQL * Plus或SQL Developer命令行或Java程序)的游标是否有意义。我说光标只是"显式"如果你使用cursor
关键字在某些PL / SQL代码中命名它,并且因为你没有(并且不能)通过命令行对查询执行此操作,那么它就是更接近隐式游标的PL / SQL概念。