Oracle 中的 oracle cursor(select ..) 查询的目的是啥?

Posted

技术标签:

【中文标题】Oracle 中的 oracle cursor(select ..) 查询的目的是啥?【英文标题】:What is the purpose of the orcacle cursor(select ..) query in Oracle?Oracle 中的 oracle cursor(select ..) 查询的目的是什么? 【发布时间】:2014-01-30 15:07:53 【问题描述】:

我试图了解使用 cursor(select..) 查询的目的。 例如,我从 oracle 文档中得到了这个。我可以将员工加入部门表。光标是怎么回事?

SELECT department_name, CURSOR(SELECT salary, commission_pct 
   FROM employees e
   WHERE e.department_id = d.department_id)
   FROM departments d
   ORDER BY department_name;

【问题讨论】:

此查询获取部门名称,以及该部门所有员工的工资和通讯百分比的游标引用。加入为您提供部门表中的多行,匹配相应的员工人数。还有一个有趣的讨论here 我们必须在有限的集合中获取查询。如果大批量制作,我们会最大化可能打开的游标。当以 50 个为一组打开时,在 fetch 之后打开和关闭 50 个游标。!与普通查询的主要区别是,我们不能在普通查询(标量)中返回多个列/行,这可以通过 CURSOR 表达式来实现! 【参考方案1】:

CURSOR 表达式是一个很少使用的功能,它使您能够将数据集传递给 PL/SQL 过程。

这允许高级功能,例如链接并行流水线功能。这提供了一种快速处理多个阶段的过程代码的方法。有关示例,请参见 PL/SQL Language Reference。

这是一个有趣的功能,但使用 CURSOR 表达式通常是一个巨大的错误。这意味着您的大部分处理将在 PL/SQL 而不是 SQL 中完成。 PL/SQL 非常适合控制 SQL,但它通常不是您想要完成繁重工作的地方。

我只看到使用 CURSOR 表达式有两个原因:

    开发人员不知道中级或高级 SQL 功能,例如分析函数、模型等。 构建企业规则引擎。

【讨论】:

以上是关于Oracle 中的 oracle cursor(select ..) 查询的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

cx_Oracle 连接数据库脚本

让 .NET 了解返回的 REF_CURSOR 中的 Oracle 对象

吴裕雄 python oracle操作数据库

使用 JDBC 时,Oracle 的 REF CURSOR 在 Postgresql 中的等价物是啥?

空 Oracle REF CURSOR 中的列名

oracle cursor(静态)记录