我们有一个为我们公司管理AS400的供应商。他们的服务之一是通过表我可以使用iSeries查询的表提供文件。但是,该表只有一个列,每个记录只是一个文件中的一行。因此,我需要在维护输入的顺序的同时从表中选择所有记录,但是我没有可以使用订单的列。
我在关系数据库中理解,没有子句订单的选择语句上没有保证的排序顺序。AS400/ISERIES系统是否以相同的方式运行?从我完成的阅读中,它似乎是另一种DBM,但是我找不到任何告诉我选择是否可能会更改/不更改记录插入表中的顺序。每当我运行选择时,我总是会得到看起来正确的顺序,但是如果可以的话,我想保证它。
预先感谢您的任何建议和帮助。
没有明确的ORDER BY
子句,可以按任何顺序返回记录SQL Optimizer认为最有效的记录。
db2/400具有"相对记录号"的概念。除非表上的"重用删除记录"设置为 *YES
。
您可以使用RRN函数通过文件中的物理顺序订购记录:
SELECT * FROM TABLENAME ORDER BY RRN(TABLENAME)
rrn(mytable)添加子句订单>这将以FIFO序列获取记录。但这取决于供应商如何加载表。不要相信这有一天会失败。它将与本机AS400表一起使用。
考虑在选择语句上按子句添加订单以适合您的需求。
这永远有效。如果您需要邮政编码订单中的记录,请通过ZipCode订购。如果您需要名称顺序记录,请按"名称"订购。除非您按子句指定订单。
,没有保证记录顺序。您的问题。是的,当在选择中没有订单时,选择可以使用db2(AS400)中的订单更改订单。DB2试图使用索引更快地呈现结果。
例如
select * from customer when cust_name like 'Dan%'
cust_name上有一个索引。
结果可能会由cust_name订购。取决于其他因素,但从理论上讲,一个没有子句的顺序选择的选择可以以任何顺序出现,但很可能是表或表主键的索引序列。