123
返回列表 发新帖
楼主: azqf

TYPE RANGE OF是否有容量限制?

[复制链接]
论坛徽章:
15
2013年新春福章
日期:2013-02-25 14:51:24
21#
发表于 2008-8-2 08:50 | 只看该作者
呵呵,学习了。

使用道具 举报

回复
论坛徽章:
13
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44暖羊羊
日期:2015-03-04 14:50:37ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:372010新春纪念徽章
日期:2010-03-01 11:21:032010新春纪念徽章
日期:2010-01-04 08:33:08ERP板块每日发贴之星
日期:2009-04-17 01:01:03ERP板块每日发贴之星
日期:2009-03-11 01:01:04ERP板块每日发贴之星
日期:2009-03-10 01:01:05ERP板块每日发贴之星
日期:2009-03-02 01:01:032009新春纪念徽章
日期:2009-01-04 14:52:28
22#
发表于 2008-8-2 18:48 | 只看该作者
原帖由 azqf 于 2008-8-2 01:16 发表


对,没有用HIGN,仅仅只是简单的LOW  ‘那么改成for all entries in 一个含与low同结构field的内表是我的解决方案。’这个有意义吗?我使用RANGE并不是用于屏幕,而是用于检查数据,为何还要再IN一个内表,而且这个内表仅只能存放一列数据?我想不出这样是什么好的解决方案。

并不是我没听明白,而是你并不知道这样做的本意,你并没有仔细看到是从数据库中取值,以及其KEY。ALL ENTRIES IN,我无论如何都不可能有KEY匹配的。

你明白了吗?


呵呵,我读了5遍你的这段话,没读明白,也许我应该要求你说英语

比如先取mara里的matnr然后按这些值去取ekpo的PO item行.

用range写就是:

ranges r_matnr for matnr.
r_matnr-sign = 'I'.
r_matnr-option = 'EQ'.
select matnr into r_matnr-low from mara where...
append r_matnr.
endselect.

select ebeln from ekpo into ... where matnr in r_matnr.


用for all 写就是(不应ranges表了,是只用for all entries in 而不是 “还要”):

data t_mara like table of mara occurs 0 with header line.

select matnr to t_mara-matnr from mara where...

append t_mara.

endselect.

select ebeln from ekpo for all entries in t_mara into ... where matnr = t_mara-matnr.


本人初学abap,经验不丰富。只是想提个思路,并没有“有意义”或“好的”解决方案

如果这个例子并不符合你的本意,你不如把你的本意用完整可运行的代码发出来,大家也好进一步沟通。

相互否定并不能解决问题,是不是?

使用道具 举报

回复
论坛徽章:
27
会员2007贡献徽章
日期:2007-09-26 18:42:102010广州亚运会纪念徽章:体育舞蹈
日期:2011-05-11 09:57:072010广州亚运会纪念徽章:棋类
日期:2011-05-13 16:29:13蜘蛛蛋
日期:2011-06-30 17:53:11紫蛋头
日期:2011-07-12 11:19:41复活蛋
日期:2011-07-21 22:31:43蜘蛛蛋
日期:2011-09-08 09:59:19ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15蛋疼蛋
日期:2011-11-15 22:29:342011新春纪念徽章
日期:2011-04-21 11:29:39
23#
 楼主| 发表于 2008-8-3 01:03 | 只看该作者
原帖由 wjfonhand 于 2008-8-2 18:48 发表


呵呵,我读了5遍你的这段话,没读明白,也许我应该要求你说英语

比如先取mara里的matnr然后按这些值去取ekpo的PO item行.

用range写就是:

ranges r_matnr for matnr.
r_matnr-sign = 'I'.
r_matnr-option = 'EQ'.
select matnr into r_matnr-low from mara where...
append r_matnr.
endselect.

select ebeln from ekpo into ... where matnr in r_matnr.


用for all 写就是(不应ranges表了,是只用for all entries in 而不是 “还要”):

data t_mara like table of mara occurs 0 with header line.

select matnr to t_mara-matnr from mara where...

append t_mara.

endselect.

select ebeln from ekpo for all entries in t_mara into ... where matnr = t_mara-matnr.


本人初学abap,经验不丰富。只是想提个思路,并没有“有意义”或“好的”解决方案

如果这个例子并不符合你的本意,你不如把你的本意用完整可运行的代码发出来,大家也好进一步沟通。

相互否定并不能解决问题,是不是?



首先,数据量非常大的情况下,我不会用SELECT...ENDSELECT,这不符合性能优化。
其次,我FOR ALL的语句用得很少,也许并不了解最开始你所说的意思,或者我水平不足,误解之处请谅解。
FOR ALL必须是KEY,而RANGE可以不是,而我的程序中IN RANGE并不是KEY,这是本意,如果是我理解错了,那待我先测试后再提。

使用道具 举报

回复
论坛徽章:
13
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44暖羊羊
日期:2015-03-04 14:50:37ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:372010新春纪念徽章
日期:2010-03-01 11:21:032010新春纪念徽章
日期:2010-01-04 08:33:08ERP板块每日发贴之星
日期:2009-04-17 01:01:03ERP板块每日发贴之星
日期:2009-03-11 01:01:04ERP板块每日发贴之星
日期:2009-03-10 01:01:05ERP板块每日发贴之星
日期:2009-03-02 01:01:032009新春纪念徽章
日期:2009-01-04 14:52:28
24#
发表于 2008-8-5 23:23 | 只看该作者
FOR ALL必须是KEY  么?

使用道具 举报

回复
论坛徽章:
3
奥运会纪念徽章:皮划艇静水
日期:2008-10-24 13:20:44授权会员
日期:2009-01-21 21:49:40ERP板块每日发贴之星
日期:2010-05-21 01:01:01
25#
发表于 2008-8-5 23:52 | 只看该作者
abap的数据库查询的执行时间又上限的限制,如果长时间执行没有结果就对出错。平时我做in range table查询的时候,一般都限制为5000行放到range table 中做一次。这样,这样数据查询超时,或者内存不足的情况就会大大的减少。
记得去年做一本程序的时候,一开始数据就抽了90万件,结果执行27小时后,内存耗尽。后来就改的这种办法。

使用道具 举报

回复
论坛徽章:
13
授权会员
日期:2008-10-09 17:05:152013年新春福章
日期:2013-02-25 14:51:24ITPUB社区12周年站庆徽章
日期:2013-10-08 14:53:152014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02马上有对象
日期:2014-11-30 11:39:592015年新春福章
日期:2015-03-04 14:51:122015年新春福章
日期:2015-03-06 11:57:31
26#
发表于 2008-8-6 20:52 | 只看该作者
学习。。

使用道具 举报

回复
论坛徽章:
15
2013年新春福章
日期:2013-02-25 14:51:24
27#
发表于 2008-8-6 22:04 | 只看该作者
原帖由 wjfonhand 于 2008-8-5 23:23 发表
FOR ALL必须是KEY  么?

可以不是啊,但最好不要重复,重复结果也是一样的.

使用道具 举报

回复
论坛徽章:
8
银牌徽章
日期:2008-09-04 11:33:20ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52复活蛋
日期:2011-08-04 17:29:24蜘蛛蛋
日期:2011-12-28 10:59:34
28#
发表于 2008-8-8 16:33 | 只看该作者
range 本身没有限制,是sql长度有限制,用for all entries替代。

使用道具 举报

回复
论坛徽章:
24
休斯顿火箭
日期:2013-01-30 14:20:392013年新春福章
日期:2013-02-25 14:51:24萨克拉门托国王
日期:2013-12-24 17:04:08金州勇士
日期:2013-12-24 17:04:09明尼苏达森林狼
日期:2014-01-01 10:07:12菲尼克斯太阳
日期:2013-12-27 15:33:09洛杉矶湖人
日期:2013-12-27 15:33:09萨克拉门托国王
日期:2013-12-27 15:33:09金州勇士
日期:2013-12-27 15:33:09ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
29#
发表于 2008-8-9 17:40 | 只看该作者
原帖由 ttytt1 于 2008-8-8 16:33 发表
range 本身没有限制,是sql长度有限制,用for all entries替代。

理解的正确,不同的数据库有不同的限制.

使用道具 举报

回复
论坛徽章:
2
2013年新春福章
日期:2013-02-25 14:51:24青年奥林匹克运动会-七人制橄榄球
日期:2014-08-28 10:17:21
30#
发表于 2012-7-9 16:04 | 只看该作者
1W, 就会有这个Error

使用道具 举报

回复

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

本版积分规则 发表回复

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