【问题标题】:EMC Documentum DQL - How to delete repeating attributeEMC Documentum DQL - 如何删除重复属性
【发布时间】:2015-03-05 13:24:26
【问题描述】:

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

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 等查询工作正常,但我不想删除整个对象。

【问题讨论】:

  • 除了我下面的建议之外,如果您在网络上搜索一下,您会发现很多有用的博客文章和讨论。这个话题对于所有 DCTM 开发人员来说通常是重复的烦恼...... :)
  • 呵呵是这么想的,在任何地方都找不到直接的答案。我会看看我是否可以使用 java 访问 SQL 数据库并使用纯 SQL 来代替。谢谢:D
  • 这里的 CS 版本是什么?

标签: dql documentum dfc emc


【解决方案1】:

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

要么

  1. 将给定位置的属性值设置为空,并更改代码以丢弃空属性,
  2. 使用多条 DQL 语句打乱顺序,使最后一条为空,
  3. 更改数据模型,例如将单个属性用作带有预定义分隔符的属性包。

详情(一)

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

详情(二)

对于每个索引;先找到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 来做到这一点,但这可能不值得。

【讨论】:

    【解决方案2】:

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

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

    由此您可能会猜测该类型的状态不一致,或者您正在尝试删除重复属性的太大索引等。您是否使用一致性检查器作业和其他类似作业检查了您的存储库?

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

    【讨论】:

    • 我同意这有点神秘。要找到正确的索引值,请使用 API 并转储对象,或使用以下查询:SELECT (i_position*-1)-1 FROM gemp1_product WHERE ingredients = ... ENABLE (ROW_BASED)
    猜你喜欢
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    相关资源
    最近更新 更多