'select * from [table_name]'秘密地是一个游标?

时间:2017-10-31 06:58:47

标签: sql oracle select plsql cursor

几天前我在面试时被询问select * from [table_name]是否是游标,因为它一次取出一些记录?

如果是,则选择哪种类型? 明确隐含以及为什么?

如果有人能详细说明,那将是一个很大的帮助。

3 个答案:

答案 0 :(得分:3)

Oracle在内部创建了一个游标来为您的select查询提供服务,因此我们将其称为IMPLICIT游标。

我们将以下内容称为您自己创建的显式游标,以便对其进行更多控制。

CURSOR cur IS SELECT col FROM table WHERE condition;

答案 1 :(得分:1)

显式游标是明确打开,获取数据,关闭的游标。

如上所述,游标的使用有两部分:

  1. 游标的定义
  2. 使用游标
  3. 光标的定义可以是

      

    CURSOR c IS SELECT col1,col2 FROM table_name

      

    FOR i IN(SELECT col1,col2 FROM table_name)

    接下来会出现差异:

    1. 显式游标需要
    2.   

      OPEN,FETCH,EXIT WHEN,CLOSE

      1. 隐式游标执行FOR LOOP语句中的所有上述步骤。
      2. 结论是,SELECT语句是一个隐式游标。

        最佳, Mikcutu。

答案 2 :(得分:1)

是的,每个查询代表一个游标。

概念指南从游标链接到private SQL area,它定义为

  

内存中包含已解析语句和其他待处理信息的区域。私有SQL区域包含绑定变量值,查询执行状态信息和查询执行工作区等数据。

PL/SQL Language Reference说:

  

隐式游标是由PL / SQL构造和管理的会话游标。每次运行SELECT或DML语句时,PL / SQL都会打开一个隐式游标。

  

显式游标是您构建和管理的会话游标。您必须声明并定义显式游标,为其指定名称并将其与查询相关联(通常,查询返回多行)。

这些是来自PL / SQL的概念,因此我不确定将它们用于其他客户端(如SQL * Plus或SQL Developer命令行或Java程序)的游标是否有意义。我说光标只是"显式"如果你使用cursor关键字在某些PL / SQL代码中命名它,并且因为你没有(并且不能)通过命令行对查询执行此操作,那么它就是更接近隐式游标的PL / SQL概念。