gpt4 book ai didi

aviarc - 在 aviarc 工作流程中,如何从数据库中删除行后从数据集中删除行?

转载 作者:行者123 更新时间:2023-12-04 18:12:05 24 4
gpt4 key购买 nike

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

<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 数据代理的删除操作添加一个后工作流,如下所示:

<workflow>
<delete-row dataset="{$context.commit-dataset-name}"/>
</workflow>

但是,当调用删除操作时出现错误。

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

最佳答案

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

<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>

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

关于aviarc - 在 aviarc 工作流程中,如何从数据库中删除行后从数据集中删除行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12417069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com