Documentum-自定义查询

时间:2019-08-07 05:51:59

标签: sql dql documentum

我对学习Documentum并不陌生,我们遇到了此查询,该查询是由我们正在研究如何提高速度的系统运行的:

    SELECT ALL dm_document.r_object_id
    FROM dm_document_sp dm_document
    WHERE (
      dm_document.object_name = :"SYS_B_0"
      AND dm_document.r_object_id IN (
        SELECT r_object_id
        FROM dm_sysobject_r
        WHERE i_folder_id = :"SYS_B_1"
      )
    )
    AND (
      dm_document.i_has_folder = :"SYS_B_2"
      AND dm_document.i_is_deleted = :"SYS_B_3"
    )

我们研究了添加索引或使用SQL配置文件。但是,该指数会有些大,并将继续增长。还需要定期重新检查SQL配置文件。

我们认为最好是重写SQL本身。是否有一种方法可以覆盖系统,以便对Documentum自动生成的特定查询使用自定义SQL(即由开发人员编写的SQL)?

1 个答案:

答案 0 :(得分:2)

不幸的是,没有办法改变DQL转换为结果SQL的默认Documentum行为。

但是您可以使用JDBC在自定义应用程序,作业,BOF,组件等中直接执行SQL。对于除SELECT之外的查询,还可以使用DQL EXECUTE语句,如下所示:

EXECUTE exec_sql WITH query = 'sql_query'

另一种选择是注册特定的* _s或* _r表并直接在DQL中访问它们。例如,您可以像这样注册dm_sysobject_s

REGISTER TABLE dm_dbo.dm_sysobject_s ("r_object_id" CHAR(16))

然后您可以在DQL中使用它:

SELECT object_name FROM dm_sysobject_s

通常,您还可以将注册的表与DQL中的Documentum类型结合起来,例如:

SELECT object_name FROM dm_sysobject_s s, dmi_queue_item q WHERE s.r_object_id = q.item_id

但是请记住,Documentum不建议使用这种方法直接访问其内部表,但是当您确实需要加快应用程序速度时,则必须使用其他方法。

无论如何,我建议首先使用索引,如果索引不够准确,则可以继续执行上述步骤。