在查询结果中检索前N个对象

时间:2011-07-08 13:40:01

标签: documentum

我正在使用Documentum Developer Edition 6.6。 我需要(使用DFS)执行以下DQL表达式

从“dm_document”中选择“r_version_label”,“i_chronicle_id”,“i_position”,“r_modify_date”,“subject”,“title”,“r_object_type”,“object_name”,“r_object_id”,其中FOLDER(ID('0cde75d180000107) '))和“r_object_type”='dm_document'顺序由“r_modify_date”asc,“i_position”desc

但是我只需要返回Select中的前N个对象。我再说一遍:N个对象,而不是行(这很重要,因为结果属性中的r_version_label是一个可重复的字段)。

我尝试使用以下DQL执行此操作: 从“dm_document”中选择“r_version_label”,“i_chronicle_id”,“i_position”,“r_modify_date”,“subject”,“title”,“r_object_type”,“object_name”,“r_object_id”,其中FOLDER(ID('0cde75d180000107'))和“r_object_type”='dm_document'顺序由“r_modify_date”asc,“i_position”desc ENABLE(OPTIMIZE_TOP,RETURN_TOP)

但我看到:返回的是行,而不是对象。这是因为我的Documentum Server具有默认参数return_top_results_row_based(= true)。更改server.ini中的参数对我来说是不可接受的 - 我必须编写一个应用程序,无论return_top_results_row_based是什么,它都将以相同的方式工作。

我尝试过RETURN_RANGE,SQL_DEF_RESULT_SET和FETCH_ALL_RESULTS而不是RETURN_TOP - 但它们的N也是行。

所以,现在我看到了这样做的唯一方法。我将使用以下DQL: 从“dm_document”中选择“r_version_label”,“i_chronicle_id”,“i_position”,“r_modify_date”,“subject”,“title”,“r_object_type”,“object_name”,“r_object_id”,其中FOLDER(ID('0cde75d180000107'))和“r_object_type”='dm_document'顺序由“r_modify_date”asc,“i_position”desc ENABLE(OPTIMIZE_TOP,RETURN_TOP)

在处理结果时,我的应用程序将只使用返回对象的前N个。希望“OPTIMIZE_TOP”能够最大限度地缩短读取我不会使用的对象的时间。我的DBMS是MSSQL,DQL参考说“OPTIMIZE_TOP”确实对MSSQL有效。

也许有人可以提出更好的解决方案?

1 个答案:

答案 0 :(得分:0)

尝试此查询:

从“dm_document”中选择“r_object_id”,“r_version_label”,“i_chronicle_id”,“i_position”,“r_modify_date”,“subject”,“title”,“r_object_type”,“object_name”,“r_object_id”,其中FOLDER(ID ('0cde75d180000107'))和“r_object_type”='dm_document'顺序为“r_object_id”,“r_modify_date”asc,“i_position”desc

对r_object_id进行排序应强制dql将行聚合到结果集合中的对象中。 我不知道它是如何与OPTIMIZE / RETURN_TOP交互的。