【发布时间】:2016-04-28 20:37:00
【问题描述】:
我需要使用 java 代码将新行插入到 oracle(12c) SQL 表中,前提是它们不存在 检查和插入的行可能超过 100 行
理想情况下,我希望有一个包含多个插入的合并语句 像这样:
MERGE INTO some_table t
USING(???)
ON(???)
WHEN MATCHED THEN UPDATE ???
WHEN NOT MATCHED THEN INSERT (t.id, t.val)
value("some_id","some_data")
...
...
...
但我在语法上有问题,我找不到任何例子来说明这种情况
我想知道:
- 如果这可能的话
- 如果是,是正确的方法还是有更好的解决方案
- 应该是什么语法(一些例子会很棒)
- 如果不可能,那么正确的方法是什么。
感谢帮助
【问题讨论】:
-
java 无关紧要。您正在编写一个 sql 查询,无论您使用什么语言,这都是相同的查询。
-
这是可能的,而且通常它甚至是插入的最佳解决方案(尤其是当您需要插入 AND 来更新目标表中的行时)。例如,可以在此处找到语法:docs.oracle.com/cd/B28359_01/server.111/b28286/… 将为您寻找几个示例。
-
感谢 mathguy,我已经检查了该链接,但它仅显示如何合并其他表中的行,我需要添加新行 - 这让我感到困惑,再次感谢
-
不,您不仅可以从表中合并,还可以从视图和子查询中合并。否则你将如何插入?一次一行,或者您是否有某种查询返回需要插入的内容?如果一次是一行(例如,在键盘上键入文字),那么插入语句是正确的解决方案。如果您要插入在数据库中以某种方式创建的行,则合并可能会更好。您需要插入的行的来源是什么?
-
行的来源在数据库之外它来自java代码:用户上传xml文件,应用程序拥有并将数据转换为新行
标签: sql oracle sql-insert sql-merge