【发布时间】:2022-01-12 22:00:48
【问题描述】:
所以我有这张桌子A
| ENTITY_ID | DOCUMENT_ID | CREATE_DATE | CAPITAL_STOCK |
|---|---|---|---|
| XX123456789 | WQE | 17.08.02 | 1000 |
| XX123456789 | AXC | 18.12.05 | 1000 |
| XX123456789 | MKU | 19.07.04 | 1000 |
| ... | ... | ... | ... |
这张表B
| ENTITY_ID | LCOMPANY_CODE | |
|---|---|---|
| XX123456789 | 678 | |
| ... | ... | ... |
还有这张表C
| LCOMPANY_CODE | CHANGE_DATE | CAPITAL_STOCK |
|---|---|---|
| 678 | 17.01.01 | 2000 |
| 678 | 18.01.01 | 4000 |
| 678 | 18.06.01 | 6500 |
| ... | ... | ... |
正如您在table C 中看到的,CAPITAL_STOCK 在特定日期更改为相同的LCOMPANY_CODE
我想用C.CAPITAL_STOCK 值更新A.CAPITAL_STOCK,但首先要注意几点:
-
我必须链接
Table A和table C的唯一方法是通过table B,我不能简单地从table C更新到table A。 -
C.CHANGE_DATE 17.01.01处,C.CAPITAL_STOCK的值为2000,table A的值为1000。例如,在表的每一行中,只要找到A.CREATE_DATE所在的行,在这种情况下,between 17.01.01 and 17.12.31、A.CAPITAL_STOCK必须有value = 2000。无论何时找到A.CREATE_DATE所在的行,在18.01.01 and 18.05.31之间,A.CAPITAL_STOCK必须有value = 4000,在18.05.31之后CAPITAL_STOCK应该有6500值。
进行此更新的最佳方式是什么?
我正在考虑使用 PL/SQL 块,将值提取到游标,然后使用 for 循环漫游 A 表中的所有记录并使用适当的值进行更新,但这是最简单的解决方案吗?更让我困惑的是A-C table链接,然后是更新问题……
【问题讨论】:
-
您可以使用触发器来解决这个问题。这可能很容易
-
你能说得更具体些吗?我怎样才能构造那个代码块?