EMC Documentum DQL - 如何删除重复属性

时间:2015-01-07 15:39:13

标签: dql documentum dfc emc

我在我的数据库上创建了一些对象,我需要删除一些与它们相关的重复属性。 我试图运行的查询是:

UPDATE gemp1_product objects REMOVE ingredients[1] WHERE (r_object_id = '08015abd8002cd68')

但我得到的是以下错误信息:

  

查询数据库时出错。   [DM_QUERY_E_UPDATE_INDEX]错误:"更新:无法删除索引1处的属性成分。"   [DM_OBJECT_W_DELETE_ATTR_POSITION_ERROR]警告:"尝试删除   不存在的属性88"

对象 08015abd8002cd68 存在,我可以在数据库中看到它。 SELECT和DELETE之类的查询工作正常,但我不想删除整个对象。

2 个答案:

答案 0 :(得分:1)

没有简单的方法可以做到这一点。原因是重复属性是有序的,以便为给定对象同步多个重复属性。

要么

  1. 为给定位置设置属性值为空,并将代码更改为丢弃空属性
  2. 使用多个DQL语句对顺序进行洗牌,以使最后一个变为空,
  3. 更改您的数据模型,例如使用单个属性作为具有预定义分隔符的属性包。
  4. 详情(1)

    UPDATE gemp1_product OBJECTS SET ingredients[1] = '' WHERE ...
    

    详情(2)

    对于每个指数;首先找到index + 1的值:

    SELECT ingredients
    FROM gemp1_product
    WHERE (i_position*-1)-1 = <index+1>
    ENABLE (ROW_BASED)
    

    使用新查询中的值:

    UPDATE gemp1_product OBJECTS SET ingredients[1] = '<value_from_above>' WHERE ...
    

    也应该可以通过以某种方式嵌套DQL来实现这一点,但它可能不值得努力。

答案 1 :(得分:0)

您的查询或存储库有问题。我认为您在错误输入您的属性名称或在UPDATE查询中使用错误的索引。 如果你谷歌DM_OBJECT_W_DELETE_ATTR_POSITION_ERROR,你会在this link上看到更详细的解释:

原因:程序执行了一个DeleteAttr操作,该操作指定了一个不存在的属性位置(负数或大于对象中属性数的数字)。

从这里你可以猜到该类型不是一致状态,或者你试图删除重复属性的过大索引等。你是否用一致性检查器Job和其他类似的工作检查了你的存储库?

对于使用DQL查询删除重复属性(sttribute)值,单个查询无法实现,因为您需要指定最初不知道的索引位置。但是编写一个简单的脚本或手动执行它,如果它没有大量的值要删除是你想要的方式。