Oracle SQL 多更新

Posted

技术标签:

【中文标题】Oracle SQL 多更新【英文标题】:Oracle SQL Multi Update 【发布时间】:2020-12-01 11:11:07 【问题描述】:

请编辑公关号码

L3970076 to L3970276, 
L3970077 to L3970277, 
L3970078 to L3970278, 
L3970080 to L3970280, 
L3970082 to L3970282, 
L3970083 to L3970283, 
L3970085 to L3970285

SELECT * FROM GNGRB.PRFILE WHERE PRNO IN ('L3970076', 'L3970077', 'L3970078', 'L3970080', 'L3970082', 'L3970083', 'L3970085');

如何更新

【问题讨论】:

【参考方案1】:

假设所有字符串都具有相同的长度,并且您总是必须将第 6 个字符编辑为“2”,这可能就足够了:

update gngrb.prfile
set prno = substr(prno, 1, 5) || '2' || substr(prno, 7)
where ...

【讨论】:

【参考方案2】:

你似乎想要一个case 表达式:

update gngrb.prfile
set prno = case prno
    when 'L3970076' then 'L3970276'
    when 'L3970077' then 'L3970277'
    when 'L3970078' then 'L3970278'
    when 'L3970080' then 'L3970280'
    when 'L3970082' then 'L3970282'
    when 'L3970083' then 'L3970283'
    when 'L3970085' then 'L3970285'
end
where prno in (
    'L3970076', 
    'L3970077', 
    'L3970078', 
    'L3970080', 
    'L3970082', 
    'L3970083', 
    'L3970085'
);

【讨论】:

【参考方案3】:

您可以使用SUBSTRREGEXP_REPLACE,如下所示:

UPDATE GNGRB.PRFILE
   SET
    PRNO = SUBSTR(PRNO,1) || (SUBSTR(PRNO,2) + 200)
    --PRNO  = REGEXP_REPLACE(PRNO ,'(^.5)(0)([0-9]2$)','\12\3')
 WHERE PRNO IN (
    'L3970076',
    'L3970077',
    'L3970078',
    'L3970080',
    'L3970082',
    'L3970083',
    'L3970085'
);

【讨论】:

以上是关于Oracle SQL 多更新的主要内容,如果未能解决你的问题,请参考以下文章

oracle中在编写存储过程启动多线程的问题?

oracle 把一个字段的值更新另一个字段。

更新之前的Oracle SQL触发器,用于设置来自其他实体的列值

oracle sql语句 若某字段为空则更新此字段否则更新另一个字段,只用一个sql语句

SQL Server 2008 update语句只能更新1行数据?

oracle和mysql中update联表批量更新数据的区别