我可以理解为了避免因为开销和不便而不得不使用光标,但看起来有一些严重的光标 - 恐惧症 - 狂热正在进行,人们将不遗余力地避免使用光标.
例如,有一个问题询问如何使用游标执行明显无关紧要的操作,并使用带有递归自定义函数的公用表表达式(CTE)递归查询提出接受的答案,即使这会将可处理的行数限制为32 (由于sql server中的递归函数调用限制).这让我觉得它是系统寿命的可怕解决方案,更不用说为了避免使用简单的光标而付出的巨大努力.
这种疯狂仇恨的原因是什么?有一些"着名的权威"发布了针对游标的法特瓦吗?一些无法形容的邪恶是否潜伏在游戏的核心,腐蚀了儿童的道德或什么?
维基问题,答案比代表更感兴趣.
相关信息:
编辑:让我更精确:我理解不应该使用游标而不是正常的关系操作 ; 这是一个明智的选择.我不明白的是,即使游标是一种更简单和/或更有效的解决方案,人们也会不顾一切地避开光标,就像他们有傻瓜一样.困扰我的是非理性的仇恨,而不是明显的技术效率.
在我所工作的每家公司,我发现人们仍然在ANSI-89标准中编写SQL查询:
select a.id, b.id, b.address_1
from person a, address b
where a.id = b.id
Run Code Online (Sandbox Code Playgroud)
而不是ANSI-92标准:
select a.id, b.id, b.address_1
from person a
inner join address b
on a.id = b.id
Run Code Online (Sandbox Code Playgroud)
对于这样一个非常简单的查询,可读性没有太大差异,但是对于大型查询,我发现将我的连接条件分组并列出表格可以更容易地查看我在连接中可能存在问题的位置,以及让我在WHERE子句中保留所有过滤功能.更不用说我觉得外连接比Oracle中的(+)语法更直观.
当我尝试向人们传播ANSI-92时,使用ANSI-92而不是ANSI-89有什么具体的性能优势吗?我会自己尝试,但是我们这里的Oracle设置不允许我们使用EXPLAIN PLAN - 不希望人们尝试优化他们的代码,是吗?