我正在使用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有效。
也许有人可以提出更好的解决方案?
答案 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交互的。