PL/SQL 迭代循环 - 根据列是否具有特定值插入新记录

问题描述 投票:0回答:1

希望一切都好!

认为几乎没有什么方法可以做到这一点 - 但考虑到整体缺乏复杂性,正在寻找一种干净简单的方法。

在此示例中 - 我的表中有一条 Oracle SQL 记录,其中包含以下字段和值

标题 组织_代码、项目_代码、输出_代码、版本、金额_美元

记录示例

E4JAZ, P04, O234, Actual, 50.00

PL/SQL 逻辑需要迭代表中的所有记录(即只是一条记录),并在需要更正一个或多个列值时根据某些列中的某些字段创建额外的调整记录。

我不能简单地更新列值 - 我必须维护记录,但为每个需要调整的源创建两个调整记录。

问题是,如果调整了多个字段,我只能为一条源记录创建一条调整记录(如果调整了两个字段,我只能有一条记录显示正在调整的两个字段)。

在上面的示例中,调整记录将是(再次列出源,然后是显示两个字段更新的调整记录 - 有些记录可能不需要根据列的条件进行调整,有些可能只需要一个)

源记录示例

E4JAZ, P04, O234, Actual, 50.00

调整记录(请注意源记录上的 -50,只是 Actual_Adjust 不是 Actual,然后显示资金移动到新行的附加条目,其中 E4JAZ 更新为 F4JAQ,P04 更新为 P01)。

E4JAZ, P04, O234, Actual_Adjust, -50.00
F4JAQ, P01, 0234, Actual_Adjust, 50.00

在示例中,条件之一是如果您看到 E4JAZ 的记录,则在调整中更正为 F4JAQ。但相同的源记录 - 条件是如果您看到 P04,则更正为 P01,但必须对两列都完成此操作。

听起来我可以使用带有光标的迭代循环来完成此操作,但需要变量和某种类型的方法来捕获展示旧值和新值的变量。 只有需要对字段至少进行一次调整的源记录才会创建调整记录。

如果记录不需要对任何字段进行调整,则不会创建任何调整记录。

有人知道一个简单的方法吗?

我还需要某种计数器来确定记录是否至少有一个需要调整的字段。

感谢您的任何想法!

sql oracle plsql
1个回答
0
投票

一种可能的方法是创建一个管道表函数(https://oracle-base.com/articles/misc/pipelined-table-functions),它返回调整记录。然后,您可以将管道表函数返回的记录插入到它们所属的任何表中。

管道表函数的优点是它可以通过使用 PIPE ROW 返回所需数量的记录。

© www.soinside.com 2019 - 2024. All rights reserved.