当前位置:Gxlcms > 数据库问题 > oracle使用case或decode语句实现批量更新

oracle使用case或decode语句实现批量更新

时间:2021-07-01 10:21:17 帮助过:5人阅读

UPDATE categories 2 SET display_order = CASE id 3 WHEN 1 THEN 3 4 WHEN 2 THEN 4 5 WHEN 3 THEN 5 6 END 7 WHERE id IN (‘1‘,‘2‘,‘3‘);

或者更普遍的方式:

  1. <span style="color: #0000ff;">UPDATE</span><span style="color: #000000;"> test
  2. </span><span style="color: #0000ff;">SET</span> first_name <span style="color: #808080;">=</span> <span style="color: #ff00ff;">CASE</span>
  3. <span style="color: #0000ff;">WHEN</span> card_no <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">100</span> <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">aaa</span><span style="color: #ff0000;">‘</span>
  4. <span style="color: #0000ff;">WHEN</span> card_no <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">110</span> <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">bbb</span><span style="color: #ff0000;">‘</span>
  5. <span style="color: #0000ff;">ELSE</span> first_name<br> END

如果要批量更新多条记录的多个字段,则

  1. <span style="color: #0000ff;">UPDATE</span><span style="color: #000000;"> categories
  2. </span><span style="color: #0000ff;">SET</span> display_order <span style="color: #808080;">=</span> <span style="color: #ff00ff;">CASE</span><span style="color: #000000;"> id
  3. </span><span style="color: #0000ff;">WHEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">1</span><span style="color: #ff0000;">‘</span> <span style="color: #0000ff;">THEN</span> <span style="color: #800000; font-weight: bold;">3</span>
  4. <span style="color: #0000ff;">WHEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">2</span><span style="color: #ff0000;">‘</span> <span style="color: #0000ff;">THEN</span> <span style="color: #800000; font-weight: bold;">4</span>
  5. <span style="color: #0000ff;">WHEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">3</span><span style="color: #ff0000;">‘</span> <span style="color: #0000ff;">THEN</span> <span style="color: #800000; font-weight: bold;">5</span>
  6. <span style="color: #0000ff;">END</span><span style="color: #000000;">,
  7. title </span><span style="color: #808080;">=</span> <span style="color: #ff00ff;">CASE</span><span style="color: #000000;"> id
  8. </span><span style="color: #0000ff;">WHEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">1</span><span style="color: #ff0000;">‘</span> <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">New Title 1</span><span style="color: #ff0000;">‘</span>
  9. <span style="color: #0000ff;">WHEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">2</span><span style="color: #ff0000;">‘</span> <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">New Title 2</span><span style="color: #ff0000;">‘</span>
  10. <span style="color: #0000ff;">WHEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">3</span><span style="color: #ff0000;">‘</span> <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">New Title 3</span><span style="color: #ff0000;">‘</span>
  11. <span style="color: #0000ff;">END</span>
  12. <span style="color: #0000ff;">WHERE</span> id <span style="color: #808080;">IN</span> (‘<span style="color: #800000; font-weight: bold;">1‘</span>,‘<span style="color: #800000; font-weight: bold;">2‘</span>,‘<span style="color: #800000; font-weight: bold;">3‘</span>)

  1. <span style="color: #0000ff;">UPDATE</span><span style="color: #000000;"> test
  2. </span><span style="color: #0000ff;">SET</span> first_name <span style="color: #808080;">=</span> <span style="color: #ff00ff;">CASE</span>
  3. <span style="color: #0000ff;">WHEN</span> card_no <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">100</span> <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">aaa</span><span style="color: #ff0000;">‘</span>
  4. <span style="color: #0000ff;">WHEN</span> card_no <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">110</span> <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">bbb</span><span style="color: #ff0000;">‘</span>
  5. <span style="color: #0000ff;">ELSE</span><span style="color: #000000;"> first_name
  6. </span><span style="color: #0000ff;">END</span><span style="color: #000000;">,
  7. last_name </span><span style="color: #808080;">=</span> <span style="color: #ff00ff;">CASE</span>
  8. <span style="color: #0000ff;">WHEN</span> card_no <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">100</span> <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">xxx</span><span style="color: #ff0000;">‘</span>
  9. <span style="color: #0000ff;">WHEN</span> card_no <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">110</span> <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">yyy</span><span style="color: #ff0000;">‘</span>
  10. <span style="color: #0000ff;">ELSE</span><span style="color: #000000;"> last_name
  11. </span><span style="color: #0000ff;">END</span>

每个部分都罗列了两种方法,第二种方法更普遍,case后面直接是when,when里面可以包含更复杂的添加,比如大于小于等;但是第一种方法虽然case后直接指明了条件字段id,但因为有where的限制,执行起来更块一些把,其实针对第二种方法也可以加where以限制的。

 

另外,还看到一种使用decode的批量更新方法,不过好像decode的效率要低一些。

  1. <span style="color: #0000ff;">UPDATE</span><span style="color: #000000;"> test
  2. </span><span style="color: #0000ff;">SET</span> first_name <span style="color: #808080;">=</span> DECODE(card_no,100,<span style="color: #ff0000;">‘aaa</span><span style="color: #ff0000;">‘</span>,110,‘bbb<span style="color: #ff0000;">‘</span><span style="color: #000000;">)
  3. ,last_name </span><span style="color: #808080;">=</span> DECODE(card_no,100,<span style="color: #ff0000;">‘xxx</span><span style="color: #ff0000;">‘</span>,110,<span style="color: #ff0000;">‘yyy</span><span style="color: #ff0000;">‘</span><span style="color: #000000;">)
  4. </span><span style="color: #0000ff;">WHERE</span> card_no <span style="color: #808080;">IN</span> (<span style="color: #800000; font-weight: bold;">100</span>,101)

参考地址:

http://www.jb51.net/article/41852.htm

https://community.oracle.com/thread/682763

oracle使用case或decode语句实现批量更新

标签:

人气教程排行