ABAP里取数是个怎样的过程啊,我现在把自己定义的字段 type 表-字段于数据库表里的

ABAP里取数是个怎样的过程啊,我现在把自己定义的字段 type 表-字段于数据库表里的,第1张

DATA name(5) TYPE c.

DATA it_p0000 LIKE TABLE OF p0000.

DATA wa_p0000 TYPE p0000.

name = 'PERNR'.

以上是你的代卜孙码

FIELD-SYMBOLS <fs_field>TYPE p0000-pernr.

取数我就不写了

LOOP AT it_p0000 INTO wa_p0000.

ASSIGN COMPONENT name OF STRUCTURE wa_p0000 TO <fs_field>.

WRITE: /洞岁 <fs_field>.

ENDLOOP.

<fs_field>纳弊睁 就是你要的

PS: name = 'PERNR' 注意要大写

定义一个内表,然后按照内表中的字段进行select into到内表中。例如:

data:begin of gt_data occurs 0,

matnr like mard-matnr,

werks like mard-werks,

lgort like mard-lgort,

labst like mard-labst,

end of gt_data.

上面的表示一个内表gt_data定义出来了。然后我们在把对应的数据提取出来,

select matnr

werks

lgort

labst

into table gt_data

from mard

where werks = '1100'.

这样的话,数据就会按照物料号、工厂、库存地点、非限制库存 提取放到内表gt_data中了。

也可以写成:

select *

into corresponding fields of table gt_data

from mard

where werks = '1100'.

上面的这两种sql语句的册春历区别在于: 第一种程序会只针对matnr werks lgort labst 这四个字段去提取数据,第二种,程序会提取mard表中所有字段,然后按照matnr werks lgort labst 来mapping上去。 相对效率而言,第一种效率好些。

至于程序森枝优化上面,尽量减少对数据库的访问,尽量避州搜开那几个大表,比如 mseg ,bseg 等这类的表。 尽量把数据放在内存中计算, 别的倒也没什么了,其实在内表上关于一些sort table 和 hash table 来说,虽然在速度上会快一些(“比如在处理几十万条数据”),如果在几万到十几万条数据的话,性能上其实没什么太大的变化,但是在后期程序修改上,会比较的麻烦一点,一般这种内表我们只是运用在比较大的表上用。OK。说完了。就这样吧。

影响ABAP程序的运行效率主要是在程序中大量数据的取得,如果取数不得方法,很影响报表的运行效率,所有优化ABAP程序主要是优化数据取数的方法。下面这几点可以有效的提高取数的效率,从而来提高程序的运行效率。

1.选择最有效率的表名顺序(只在基于规则的优化器中有效):

ORACLE的解析器按启穗照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表

drivingtable)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果悄拦卜有3个以上的表连接查询,

那就需要选择交叉表(intersectiontable)作为基础表,交叉表是指那个被其他表所引用的表。

2.WHERE子句中的连接顺序:

ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,

那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.

3.SELECT子句中避免使用

*

‘:

ORACLE在解析的过程中,

会将'*'

依次转换成所有的列名,

这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间

4.减少访问数据库的次数:

ORACLE在内部执行了许多工作衡袭:

解析SQL语句,

估算索引的利用率,

绑定变量

,读数据块等。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8262713.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存