select语句中的默认排序顺序

2020-09-07 17:58发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


向大家致意。

我正在分析系统中的一种ABAP程序。

似乎在开发和生产系统中产生了不同的结果。

我知道这两个系统之间会有数据差异。 但是,select语句返回的结果的排序顺序会有所不同。

当执行下面的SELECT语句时,在开发系统中,结果按数据库表键FIELD1排序。 但是在生产系统中,据我所知,没有排序。

是否有一些参数或数据库设置可以控制这一点。

如何在生产系统中获得正确排序的结果。

以下是我的select语句和相关的数据声明

类型:ty_table1的开始,

field2类似于table1-field2,

field1类似于table1-field1,

field3像table1-field3,

field4就像table1-field4,

ty_table1结束。

数据:ty_table1的i_table1类型标准表。

选择field2 field1 field3 field4

FROM table1

进入表i_table1的对应字段

在哪里

field2 ='100191'。

数据库表TABLE1的字段顺序为FIELD1-FIELD2-FIELD3-FIELD4。 FIELD1是唯一的关键字段。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


向大家致意。

我正在分析系统中的一种ABAP程序。

似乎在开发和生产系统中产生了不同的结果。

我知道这两个系统之间会有数据差异。 但是,select语句返回的结果的排序顺序会有所不同。

当执行下面的SELECT语句时,在开发系统中,结果按数据库表键FIELD1排序。 但是在生产系统中,据我所知,没有排序。

是否有一些参数或数据库设置可以控制这一点。

如何在生产系统中获得正确排序的结果。

以下是我的select语句和相关的数据声明

类型:ty_table1的开始,

field2类似于table1-field2,

field1类似于table1-field1,

field3像table1-field3,

field4就像table1-field4,

ty_table1结束。

数据:ty_table1的i_table1类型标准表。

选择field2 field1 field3 field4

FROM table1

进入表i_table1的对应字段

在哪里

field2 ='100191'。

数据库表TABLE1的字段顺序为FIELD1-FIELD2-FIELD3-FIELD4。 FIELD1是唯一的关键字段。

付费偷看设置
发送
6条回答
haha101010
1楼 · 2020-09-07 18:04.采纳回答

你好乔什瓦,

您应该通过abap编码保证相同的排序顺序。 我不会在SQL语句中使用它,因为ORDER BY会降低性能。

相反,应声明内部表是使用唯一键排序的,或者您可以根据需要对内部标准表进行排序,而按FIELD1的升序或降序进行。

Jonas

软件心理学工程师
2楼-- · 2020-09-07 18:04

ORDER BY不会降低性能。 如果要按特定顺序排列数据,请在选择->而不是SORT语句中使用ORDER BY。

何必丶何苦呢
3楼-- · 2020-09-07 18:08

你好Joshva,

如果未定义顺序,则选择语句获取数据的顺序是不可预测的。 db上的顺序似乎主要是创建的顺序,但是可以随时更改。

这很危险,因为开发人员会看到任何订单,并认为总是这样。 但这不是!

因此,如果您的声明中未定义任何订单,请不要考虑任何订单!

致谢

Stefan

Nan4612
4楼-- · 2020-09-07 18:08

是的,好的做法始终是对数据进行显式排序(在SELECT或SORT语句或内部表的定义中),以防止出现诸如。说明602138-IDoc:段字段的顺序不正确...

关于

雷蒙德(Raymond)

nice_wp
5楼-- · 2020-09-07 18:26

非常感谢您的回答。

我将在ABAP代码中进行更改,以对内部表进行排序。

我只是想检查除通过程序外是否还有其他方法可以控制它。

但是您已经为我澄清了这一点。

此致

约书亚。

nice_wp
6楼-- · 2020-09-07 18:09

嗨,乔什瓦,

编写Select语句时有3件事-

1。 选择字段的顺序应与数据库表中的顺序相同。

2。 where条件中的字段顺序也应与数据库表中的顺序相同。

3。 您要选择的内部表中字段的顺序也应与数据库表中的顺序相同。

此内部表在声明时理想情况下应为标准类型,并应在 选择查询。

因此理想情况下,您的选择查询应该像这样

TYPES:TY_TABLE1的BEGIN,

FIELD1 TYPE TABLE1-FIELD1,

< p> FIELD2类型TABLE1-FIELD2,

FIELD3类型TABLE1-FIELD3,

FIELD4类型TABLE1-FIELD4,

TY_TABLE1的结尾。

DATA:TY_TABLE1的I_TABLE1类型标准表。

选择FIELD1

FIELD2

FIELD3

FIELD4

FROM TABLE1

INTO TABLE I_TABLE1

其中FIELD1 =

AND FIELD2 =

AND FIELD3 =

AND FIELD4 =

IF SY-SUBRC EQ 0。

SORT I_TABLE1通过FIELD1 FIELD2 FIELD3 FIELD4。

ENDIF。

一周热门 更多>