SORT
在标准内部表上运行时,没有密钥规范的语句究竟做了什么?根据文档:
如果没有使用加法 BY 输入显式排序键,则内部表 itab 按主表键排序。排序的优先级基于在表定义中指定关键字段的顺序。在标准键中,按照表的行类型中键字段的顺序进行排序。如果标准表的主表键为空,则不进行排序。如果这是静态已知的,则语法检查会产生警告。
主表键定义为:
每个内部表都有一个主表键,它可以是自定义键或标准键。对于散列表,主键是散列键,对于排序表,主键是排序键。这两种表类型都是优化了键访问的键表,因此主键有自己的管理。当您访问单个行时,这些表的键字段受到写保护。标准表也有一个主键,但相应的访问没有优化,没有单独的键管理,键字段没有写保护。
为了更好地衡量,标准密钥定义为:
内部表的主表键,其在结构化行类型中的键字段均为类字符数据类型和类字节数据类型的表字段。如果行类型包含子结构,则将这些子结构分解为基本组件。如果行类型本身不是表类型,则非结构化行类型的标准键是整个表行。如果没有对应的表字段,或者行类型本身是表类型,则标准表的标准键为空或不包含键字段。
所有这些主要只是让我感到困惑,因为我不确定我是否真的可以依靠基本SORT
陈述来提供可靠或安全的结果。我真的应该在所有情况下都避免它,还是如果使用得当,它是否有目的?
通过扩展,如果我想运行 a DELETE ADJACENT DUPLICATES FROM itab COMPARING ALL FIELDS
,在简单之后什么时候这样做是安全的SORT itab.
?仅当我在所有字段上都添加了一个键?只有当我有一个带有clike
和xsequence
列的内部表时才没有显式键?如果我想执行那个 DELETE 语句,在内部表上运行的最佳 SORT 语句是什么?