使用"merge into",ORACLE批量更新优化,将A表字段的值,变更为B表字段值.

6 篇文章 0 订阅
4 篇文章 0 订阅

1.建测试表语句

CREATE TABLE MERGE_DATA_DEMO1
(
    ID1 VARCHAR2(32),
    NAME1 VARCHAR2(100)
);
COMMENT ON TABLE MERGE_DATA_DEMO1 IS '测试merge函数demo1表';
CREATE TABLE MERGE_DATA_DEMO2
(
    ID2 VARCHAR2(32),
    NAME2 VARCHAR2(100)
);
COMMENT ON TABLE MERGE_DATA_DEMO2 IS '测试merge函数demo2表';

2.向表中批量插入10000条测试数据,

begin
  for i in 1 .. 10000 loop
    INSERT INTO "NEW_TEMP"."MERGE_DATA_DEMO1" ("ID1", "NAME1") VALUES (i, 'name_' || i);
    INSERT INTO "NEW_TEMP"."MERGE_DATA_DEMO2" ("ID2", "NAME2") VALUES (i, null);
  end loop;
end;

查询验证数据是否插入:

3.使用普通sql批量变更"MERGE_DATA_DEMO2"中的name值,

:如果"demo1"中"id1"值和"demo2"和"id2"相同,则变更"demo2"中的"name2"值为"demo1"中的"name1".

update MERGE_DATA_DEMO2 demo2 set demo2.NAME2 = (select demo1.NAME1 from MERGE_DATA_DEMO1 demo1 where demo2.ID2 = demo1.ID1);

执行结果:批量更新成功,使用时间了1分钟743毫秒

4.将"DEMO2"中的"name2"置空,

update MERGE_DATA_DEMO2 set NAME2 = null ;

5.使用"merge into"函数批量更新.

:如果"demo1"中"id1"值和"demo2"和"id2"相同,则变更"demo2"中的"name2"值为"demo1"中的"name1".

执行结果:批量更新成功,使用时间104毫秒

结果显而易见,批量更新操作中使用"merge into"函数 效率要远远大于普通update语句.数据量越大,使用时间也越明显!

ps:原本我想用1000000条数据测试来着,结果普通update跑了10分钟还没跑完...我就偷偷缩小数据量了(偷笑)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果您需要批量更新同一列的不同,可以使用 OracleMERGE INTO 语句,它可以将 INSERT、UPDATE 和 DELETE 操作组合在一起执行。以下是一个使用 MERGE INTO 语句进行批量更新的示例: ``` MERGE INTO table_name t USING ( SELECT id, new_value FROM ( SELECT id, 'new_value1' AS new_value FROM table_name WHERE condition1, SELECT id, 'new_value2' AS new_value FROM table_name WHERE condition2, ... SELECT id, 'new_valueN' AS new_value FROM table_name WHERE conditionN ) ) s ON (t.id = s.id) WHEN MATCHED THEN UPDATE SET t.column_name = s.new_value; ``` 在上面的示例中,我们将多个 SELECT 子句组合在一起,每个 SELECT 子句都选择一个不同的条件,并使用不同的新。我们将所有这些选择结果合并到一个使用 UNION ALL 连接的子查询中,并将其作为 USING 子句的一部分。最后,我们在 ON 子句中指定匹配条件,并在 WHEN MATCHED THEN 子句中指定要更新的列及其对应的新。 注意,使用 MERGE INTO 语句进行批量更新时,您需要小心,以确保不会意外更新不想修改的行。建议在执行前进行充分测试,以确保语句的正确性。 ### 回答2: 在Oracle数据库中,要实现批量更新同一字段但不同的操作,可以使用多种方法。 一种常用的方法是使用SQL的UPDATE语句,并结合使用CASE WHEN条件达式。首先需要构建一个更新语句模板,例如: UPDATE 名 SET 字段名 = CASE WHEN 条件1 THEN 1 WHEN 条件2 THEN 2 ... ELSE 字段名 END; 其中,名是要更新的的名称,字段名是要更新的字段的名称。条件1、条件2等是根据需要自行定义的更新条件,例如:字段名 = 'A'、字段名 = 'B'等。1、2等是根据不同条件更新时需要更新的不同。 接下来,将上述更新语句模板根据具体的条件和进行批量替换,构建出实际的更新语句。例如: UPDATE 名 SET 字段名 = CASE WHEN 字段名 = 'A' THEN 1 WHEN 字段名 = 'B' THEN 2 WHEN 字段名 = 'C' THEN 3 ... ELSE 字段名 END; 执行上述更新语句即可实现同一字段但不同批量更新操作。 另外,如果需要同时更新多个字段,可以在UPDATE语句中使用多个CASE WHEN条件达式,分别针对不同字段进行更新。 总之,通过使用UPDATE语句和CASE WHEN条件达式,可以方便地实现Oracle数据库中批量更新同一字段但不同的操作。 ### 回答3: 当需要批量更新Oracle数据库中的某个字段,但是该字段在不同的记录中是不同的时候,可以使用UPDATE语句结合WHERE子句来实现。 首先,根据自己的需求编写好UPDATE语句,指定要更新的字段,并确定新的字段。然后,根据不同的条件设置不同的WHERE子句,以筛选出需要更新的记录。 例如,假设我们需要将students中名字为"张三"的学生的年龄改为20岁,名字为"李四"的学生的年龄改为18岁,可以使用以下UPDATE语句: ``` UPDATE students SET age = CASE WHEN name = '张三' THEN 20 WHEN name = '李四' THEN 18 END WHERE name IN ('张三', '李四'); ``` 以上语句将根据条件对students中的记录进行更新。当name字段为'张三'时,将age字段更新为20;当name字段为'李四'时,将age字段更新为18。WHERE子句中的条件指定了需要更新的记录,这里我们选择了名字为'张三'和'李四'的记录。 执行以上语句后,名字为'张三'的学生的年龄将变为20岁,名字为'李四'的学生的年龄将变为18岁。 总结来说,要批量同字段不同,需先编写好UPDATE语句,然后根据不同的条件设置不同的WHERE子句来实现更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值