没有stragg
我得到了14行的列表。当我引入stragg
或wm_concat
时,第一行的内容不会出现在列表的前面。我在我的应用程序中的许多地方使用stragg
,现在我担心我可能无法获得预期的结果。
这是否可以在连接之前与数据列的宽度相关?
当我对数字列表使用stragg
时,我得到的正是我所期望的,只有文字我才发现它不正确地排序数据。这是最令人不安的。它应该不相关,但我正在使用11g连接dll在TOAD中运行查询。
编辑:
当我将项目数量减少到前三个时,第一个项目位于列表的前面,当我添加第四个项目时,它将被推送到列表的末尾。随着其他项目的推出,它从最后一次飙升。我不希望stragg
在此过程中改变列表的顺序。
答案 0 :(得分:2)
stragg
是用户定义的聚合函数。各种各样的人(Tom Kyte,Tim Hall和许多其他人)已经编写了该功能的各种版本。不知道你开始使用这些功能中的哪一个或者你对它做了哪些自定义,我将不得不推测一下。但是,一般情况下,这些函数没有进行任何类型的内部排序,因此值出现在列表中的顺序是任意的。函数今天返回一个订单,明天返回不同订单或者订单在不同会话中有所不同,这将是完全有效的。
各种人也编写了用户定义的聚合函数,它们按排序顺序返回数据列表。例如,加里迈尔斯有一个variant of the stragg
function that sorts the elements alphabetically。您可以使用它并自定义函数,以按照您要排序的结果对结果进行排序。
但是,如果您使用的是Oracle 11.2或更高版本,那么使用LISTAGG
analytic function会更好,这样可以更轻松地指定(或更改)数据排序方式。