我在我的数据库上创建了几个对象,我需要删除一些与它们相关的重复属性。我试图运行的查询是:
UPDATE gemp1_product objects REMOVE ingredients[1] WHERE (r_object_id = '08015abd8002cd68')
但我得到的只是一条跟踪错误信息:
数据库查询错误。DM_QUERY_E_UPDATE_INDEXerror:“更新:无法删除索引1中的tghe属性成分。”DM_OBJECT_W_DELETE_ATTR_POSITION_ERRORwarning:“尝试删除不存在的属性88”
对象08015abd8002cd68存在,我可以在数据库中看到它。像SELECT和DELETE这样的查询可以正常工作,但是我不想删除整个对象。
发布于 2015-01-07 16:09:08
要做到这一点没有简单的办法。原因是对重复属性进行排序,以便为给定对象同步多个重复属性。
任一
细节(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也可以做到这一点,但这可能不值得付出努力。
发布于 2015-01-08 00:35:02
查询或存储库有问题。我认为您在更新查询中键入了属性名或使用了错误的索引。如果你在谷歌上搜索DM_OBJECT_W_DELETE_ATTR_POSITION_ERROR
,你会在此链接上看到更详细的解释:
原因:程序执行DeleteAttr操作,指定不存在的属性位置(负数或大于对象中属性数的数字)。
由此,您可以猜测类型不是处于一致状态,或者您试图删除重复属性的太大索引,等等。您是否使用一致性检查器Job和其他类似的作业检查了您的存储库?
对于使用DQL查询删除重复属性值(sttribute),这在单个查询中是无法实现的,因为您需要指定一开始不知道的索引位置。但是,如果要删除的值不多,则编写一个简单的脚本或手动执行它就是您想要的方式。
https://stackoverflow.com/questions/27823031
复制相似问题