'select * from [table_name]' 是偷偷游标?
'select * from [table_name]' is secretly a cursor?
几天前在一次采访中有人问我 select * from [table_name]
是不是游标,因为它一次获取多条记录?
如果是那么是哪种类型? 显式或隐式,为什么?
拜托,如果有人能对此进行详细说明,那将是一个很大的帮助。
Oracle 在内部创建一个游标来为您的 select 查询提供服务,因此我们将其称为 IMPLICIT 游标。
而我们将以下内容称为您自己创建的显式游标,以便对其进行更多控制。
CURSOR cur IS SELECT col FROM table WHERE condition;
显式游标是那些显式打开、获取数据、关闭的游标。
如前所述,游标的用法有两部分:
- 游标的定义
- 游标的使用
游标的定义可以像
CURSOR c IS SELECT col1, col2 FROM table_name
或
FOR i IN (SELECT col1, col2 FROM table_name)
接下来是差异:
- 显式游标需要
OPEN, FETCH, EXIT WHEN, CLOSE
- 隐式游标在 FOR 循环语句中执行上述所有步骤。
最后,SELECT 语句是隐式游标。
最好的,
米库图
是的,每个查询代表一个游标。
概念指南从 cursor 链接到 private SQL area,它定义为
An area in memory that holds a parsed statement and other information for processing. The private SQL area contains data such as bind variable values, query execution state information, and query execution work areas.
An implicit cursor is a session cursor that is constructed and managed by PL/SQL. PL/SQL opens an implicit cursor every time you run a SELECT or DML statement.
和
An explicit cursor is a session cursor that you construct and manage. You must declare and define an explicit cursor, giving it a name and associating it with a query (typically, the query returns multiple rows).
这些实际上是来自 PL/SQL 的概念,所以我不确定将它们用于其他客户端的游标是否有意义,例如 SQL*Plus 或 SQL 开发人员命令行或 Java 程序。我会说游标只是 "explicit" 如果你在一些 PL/SQL 代码中使用 cursor
关键字命名它,并且因为你没有(也不能)这样做从命令行查询,它更接近隐式游标的 PL/SQL 概念。
几天前在一次采访中有人问我 select * from [table_name]
是不是游标,因为它一次获取多条记录?
如果是那么是哪种类型? 显式或隐式,为什么?
拜托,如果有人能对此进行详细说明,那将是一个很大的帮助。
Oracle 在内部创建一个游标来为您的 select 查询提供服务,因此我们将其称为 IMPLICIT 游标。
而我们将以下内容称为您自己创建的显式游标,以便对其进行更多控制。
CURSOR cur IS SELECT col FROM table WHERE condition;
显式游标是那些显式打开、获取数据、关闭的游标。
如前所述,游标的用法有两部分:
- 游标的定义
- 游标的使用
游标的定义可以像
CURSOR c IS SELECT col1, col2 FROM table_name
或
FOR i IN (SELECT col1, col2 FROM table_name)
接下来是差异:
- 显式游标需要
OPEN, FETCH, EXIT WHEN, CLOSE
- 隐式游标在 FOR 循环语句中执行上述所有步骤。
最后,SELECT 语句是隐式游标。
最好的, 米库图
是的,每个查询代表一个游标。
概念指南从 cursor 链接到 private SQL area,它定义为
An area in memory that holds a parsed statement and other information for processing. The private SQL area contains data such as bind variable values, query execution state information, and query execution work areas.
An implicit cursor is a session cursor that is constructed and managed by PL/SQL. PL/SQL opens an implicit cursor every time you run a SELECT or DML statement.
和
An explicit cursor is a session cursor that you construct and manage. You must declare and define an explicit cursor, giving it a name and associating it with a query (typically, the query returns multiple rows).
这些实际上是来自 PL/SQL 的概念,所以我不确定将它们用于其他客户端的游标是否有意义,例如 SQL*Plus 或 SQL 开发人员命令行或 Java 程序。我会说游标只是 "explicit" 如果你在一些 PL/SQL 代码中使用 cursor
关键字命名它,并且因为你没有(也不能)这样做从命令行查询,它更接近隐式游标的 PL/SQL 概念。