12
返回列表 发新帖
楼主: newkid

[每日一题] 有奖活动:PL/SQL Challenge 每日一题:2012-8-22 FORALL的INDICES OF子句

[复制链接]
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
11#
 楼主| 发表于 2022-8-26 22:03 | 只看该作者
FOR rec IN (SELECT * FROM plch_data)
这里的 rec 相当于自动定义了一个记录类型,这个记录类型的每一个字段对应于 SELECT 语句的每一个列,因为是 SELECT *, 那么这个记录就包含了plch_data所有的列。

l_plch_data (rec.pky) := rec;
这个意思是把右边的记录类型变量rec赋值给左边的l_plch_data这个数组里面的一个元素。这个元素的位置由 rec.pky 的值来确定。如果rec.pky=100, 那么就相当于:
l_plch_data (100) := rec;
把rec放到数组里的第100号元素。

这里就看出了和 bulk collect into的区别。bulk collect into 是不会让你指定存放位置的,而是按顺序从数组的第1,2,3,... 往下填充。
表里面的 pky 这个列的值可能是没有规律的,比如表里存放的是 pky=7, pky=13, ....
bulk collect into 就可能把 pky=7 这条记录放到l_plch_data(1), 把 pky=8 这条记录放到l_plch_data(2), ....此时你如果要在数组里面找一个pky值,你只能按顺序从头找。
但如果你像例子中那样用pky做数组下标,那么你只要有pky值,马上就能找到这个数组元素。

现实中确实bulk collect into更加常用,但是如果你有上述需求,你就得自己构造这个数组下标,一个一个赋值。

使用道具 举报

回复
论坛徽章:
0
12#
发表于 2022-8-27 17:16 | 只看该作者
newkid 发表于 2022-8-26 22:03
FOR rec IN (SELECT * FROM plch_data)这里的 rec 相当于自动定义了一个记录类型,这个记录类型的每一个字 ...

弄懂了,谢谢版主这么详细的解释。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表