首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在aviarc工作流中,从数据库中删除数据集中的行后,如何删除这些行?

在aviarc工作流中,从数据库中删除数据集中的行后,如何删除这些行?
EN

Stack Overflow用户
提问于 2012-09-14 09:40:40
回答 2查看 100关注 0票数 2

这是我正在使用的工作流程。

代码语言:javascript
复制
<atomic-commit>
   <dataset name="foo"/>
</atomic-commit>

<dataset-iterator dataset="foo">
    <create-row dataset="hist-foo"/>
    <mark-row-created dataset="hist-foo"/>
</dataset-iterator>

因此,基本上,在更新数据集foo之后,我希望在另一个历史表中记录剩余的foo条目。但是,当我从foo表中删除行时,这些行仍然保留在数据集中,因此会被添加到hist-foo中。我尝试将后期工作流添加到foo databroker的删除操作中,如下所示:

代码语言:javascript
复制
<workflow>
     <delete-row dataset="{$context.commit-dataset-name}"/>
</workflow>

然而,当调用删除操作时,我得到了一个错误。

此外,在第一次原子提交之后,foo数据集不会保留已删除的行操作,因此我无法确定要从数据集中删除哪些行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-14 12:49:08

对于这种情况,最简单的解决方案是将标记为已删除的行筛选到一个单独的数据集中。不幸的是,当只使用内置命令时,这有点长。

代码语言:javascript
复制
<dataset name="deleted-foo" databroker="..."/>

<dataset-iterator dataset="foo">
    <if test="row-marked-deleted" value1="foo">
        <then>
            <create-row dataset="deleted-foo"/>
            <copy-row from-dataset="foo" to-dataset="deleted-foo"/>
            <mark-row-deleted dataset="deleted-foo"/>
        </then>
    </if>
</dataset-iterator>

<!-- Keeping in mind that you can't delete rows from a dataset
     which is being iterated over. -->
<dataset-iterator dataset="deleted-foo">
    <dataset-reset dataset="foo" no-current-row="y"/>
    <!-- Assuming rows have a field 'id' which uniquely IDs them -->
    <set-current-row-by-field dataset="foo" field="id" value="{$deleted-foo.id}"/>

    <if test="dataset-has-current-row" value1="foo">
        <then>
            <delete-row dataset="foo"/>
        </then>
    </if>
</dataset-iterator>

<atomic-commit>
    <dataset name="deleted-foo"/>
    <dataset name="foo"/>
</atomic-commit>

<dataset-iterator dataset="foo"> 
    <create-row dataset="hist-foo"/> 
    <mark-row-created dataset="hist-foo"/> 
</dataset-iterator> 

另一种解决方案是在运行插入/更新的同时记录历史记录,例如,通过在操作中运行多个语句,或者通过设置插入/更新触发器(如果这些触发器可用)。

票数 3
EN

Stack Overflow用户

发布于 2012-09-14 12:57:19

我认为在特里斯坦的回答中,你不一定需要提交"deleted-foo“数据集,因为你没有用任何commit标志来标记它的行。

更进一步-我个人会将这些操作移动到数据库记录器的提交前和提交后工作流中。您将捕获在预提交工作流中标记为已删除的所有行,然后从foo数据集中删除行,并在提交后工作流中填充历史数据集。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12417069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档