我目前正在为一个项目实施CRUD。我有很多many-to-many
关系。其中一些是table1_id,table2_id,其中一些还有其他列(价格,金额等)。
更新many-to-many
表的最佳方法是:正如您所看到的,可能会有一些信息与新数据一起发布。
Example
t1_id t2_id amount
1 3 15
2 4 50
我想更新此信息并发送一些数据,例如:{1,3,15}
,{2,5, 25}
。所以我需要更新第一行并插入一个新行。
我想创建一个函数(pl / sql),它将获取记录表并检查它是否是新记录或更新记录。
Question
:有没有更好的方法来实现这一点?是否有任何模式可以实现这一目标?
答案 0 :(得分:2)
您正在寻找的模式通常称为“UPSERT”:如果不存在则插入一行,否则更新现有行。您仍然需要循环遍历行,但是您可以为每一行执行单个语句。
我不确定pl / sql,但这个问题可能会有所帮助:Oracle: how to UPSERT (update or insert into a table?)
答案 1 :(得分:0)
我几乎总是懒得这样做,只是从交叉引用表中删除所有相关的行,然后运行一个insert语句将其链接起来。理想情况下,这一切都可以在交易中完成。我在分析性能方面做得不多,但这样做可能并不太糟糕,特别是如果你有大量的更新要做。