我在我的数据库上创建了一些对象,我需要删除一些与它们相关的重复属性。 我试图运行的查询是:
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之类的查询工作正常,但我不想删除整个对象。
答案 0 :(得分:1)
没有简单的方法可以做到这一点。原因是重复属性是有序的,以便为给定对象同步多个重复属性。
要么
详情(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)值,单个查询无法实现,因为您需要指定最初不知道的索引位置。但是编写一个简单的脚本或手动执行它,如果它没有大量的值要删除是你想要的方式。