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 ..) 查询的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章
让 .NET 了解返回的 REF_CURSOR 中的 Oracle 对象