如何通过 pl/sql 复制行?

How to duplicate rows via pl/sql?

从 table 复制行并插入到相同的 table 并更改某些值的最佳方法是什么。假设我有一个如下所示的 table。我想 select 2021 年的所有行并插入相同的 table 并将年份切换到 2022 年。 需要用 pl/sql.

来做到这一点

id | projects   | year | employeeID

1  | chandra    | 2019 | 7

2  | alphaone   | 2020 | 2

3  | madinc     | 2021 | 3

4  | runa       | 2021 | 1

INSERT 可以与 SELECT 查询组合。

例如:

insert into t (id, projects, year)
select id, projects, 2022
from t
where year = 2021

我认为id是连续的

所以一个简单的 INSERT INTO SELECT 就足够了

如果项目每年只存在一次,则不需要 econf DISTINCT 子选择

CREATE TABLE table1 (
  "id" SERIAL,
  "projects" VARCHAR(8),
  "year" INTEGER,
  "employeeID" INTEGER
);

INSERT INTO table1
  ("id", "projects", "year","employeeID")
VALUES
  ('1', 'chandra', '2019',7),
  ('2', 'alphaone', '2020',4),
  ('3', 'madinc', '2021',2),
  ('4', 'runa', '2021',1);

4 行受影响

INSERT INTO table1 ("projects", "year","employeeID")  SELECT "projects",'2022',"employeeID" FROM (SELECT DISTINCT "projects","employeeID" FROM table1 WHERE "year" = 2021) t1 

2 行受影响

SELECt * FROM table1
id | projects | year | employeeID
-: | :------- | ---: | ---------:
 1 | chandra  | 2019 |          7
 2 | alphaone | 2020 |          4
 3 | madinc   | 2021 |          2
 4 | runa     | 2021 |          1
 1 | madinc   | 2022 |          2
 2 | runa     | 2022 |          1

db<>fiddle here