首页 > 解决方案 > 使用自动生成的值更新每一行

问题描述

我有一张桌子:

CREATE TABLE "person" (
    "ID" NUMBER(38,0), 
    "NAME" VARCHAR2(50 CHAR)
)

数据:

ID 名称 1 莫妮卡 2 空 3 空 4 斯蒂芬 5 空

我需要使用值“person”和自动递增值(从 1 - person1、person2、person3 等)更新空值:

1 monica 
2 person1
3 person2
4 stephan
5 person3

我应该使用什么 sql (oracle) 查询?

标签: sqloraclesql-updatedml

解决方案


不需要解析函数。更新可以像这样简单地完成:

UPDATE person
   SET NAME = 'person' || ROWNUM
 WHERE name IS NULL;

更新

由于人员编号需要与人员 ID 连续,因此可以使用以下查询:

UPDATE person p
   SET p.name =
              'person'
           || (SELECT person_number
                 FROM (SELECT p2.id, ROW_NUMBER () OVER (ORDER BY p2.id) AS person_number
                         FROM person p2
                        WHERE name IS NULL)
                WHERE id = p.id)
 WHERE p.name IS NULL;

推荐阅读