SQL oracle如何更新多行

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/28608776/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-01 03:18:34  来源:igfitidea点击:

how to update multiple rows in oracle

sqloracle

提问by srk786

I would like to update multiple rows with different values for all different records, but don't have any idea how to do that, i am using below sql to update for single record but i have 200 plus records to update

我想为所有不同的记录更新具有不同值的多行,但不知道该怎么做,我正在使用下面的 sql 更新单个记录,但我有 200 多条记录要更新

update employee
set staff_no = 'ab123'
where depno = 1

i have 50 dep and within those dep i need to update 200 plus staff no. any idea. At the moment if i just do a

我有 50 个 dep,在这些 dep 中,我需要更新 200 多个员工编号。任何的想法。目前如果我只是做一个

 select * from Departments 

i can see list of all employee which needs staff no updating.

我可以看到所有需要员工无需更新的员工列表。

UPDATE person
   SET staff_no = 
       CASE person_no
            WHEN 112 THEN 'ab123'
            WHEN 223 THEN 'ab324'
            WHEN 2343 THEN 'asb324'
            and so on.....


       END

回答by dasblinkenlight

You should be able to use MERGEstatement to do it in a single shot. However, the statement is going to be rather large:

您应该能够使用MERGEstatement 一次性完成。但是,该语句将相当大:

MERGE INTO employee e
USING (
   SELECT 1 as d_id, 'cd234' as staff_no FROM Dual
       UNION ALL
   SELECT 2 as d_id, 'ef345' as staff_no FROM Dual
       UNION ALL
   SELECT 3 as d_id, 'fg456' as staff_no FROM Dual
       UNION ALL
   ... -- More selects go here
   SELECT 200 as d_id, 'za978' as staff_no FROM Dual
) s
ON (e.depno = S.d_id)
WHEN MATCHED THEN UPDATE SET e.staff_no= s.staff_no

回答by Lalit Kumar B

For conditional update, you could use multiple update statements, or use CASEexpression in the SET clause.

对于条件更新,您可以使用多个更新语句,或者在SET 子句中使用CASE表达式。

Something like,

就像是,

UPDATE table
SET schema.column =  CASE
                        WHEN column1= 'value1' AND column2='value2' THEN
                          'Y'
                        ELSE
                          'N'
                     END

I wish you tried to search for a similar question on this site, there was a recent question and thiswas my answer.

我希望你试着在这个网站上搜索一个类似的问题,最近有一个问题,是我的回答。

回答by collapsar

use a case expression

使用 case 表达式

UPDATE employee
   SET staff_no = 
           CASE depno
                WHEN 1 THEN 'ab123'
                WHEN 2 THEN 'ab321'
                --...
                ELSE staff_no
           END
 WHERE depno IN ( 1, 2 ) -- list all cases here. use a subquery if you don't want to / cannot enumerate 

回答by Upendra Hukeri

If you have two tables like:

如果您有两个表,例如:

CREATE TABLE test_tab_1 (id NUMBER, name VARCHAR2(25));

CREATE TABLE test_tab_2 (id NUMBER, name VARCHAR2(25));

You can use UPDATEstatement as below:

您可以使用UPDATE如下语句:

UPDATE test_tab_1
SET test_tab_1.name = (SELECT test_tab_2.name FROM test_tab_2
WHERE test_tab_1.id = test_tab_2.id);