sql - 复制同一表中的一行而无需键入 50 多个列名(同时更改 2 列)

标签 sql oracle

在我的工作中,我通常必须在更改主键的同时复制行并给它们一个新的图章,也许还需要更改外键。

问题是我不想在做的时候输入所有的列名;

insert into table_name
select pk_seq.nextval, 
       'foreign-key', 
       col3,
       col4...col51
  from table_name
 where pk_id = "original_primary_key"

如果我在 select 语句中做 * 我将无法更新前 2 列...

有什么办法可以做我想做的事吗?

最佳答案

好吧,它可能不会那么冗长,但是这个 PL/SQL 是一个选项:

begin
  for r in (select *
              from table_name
             where pk_id = 'original_primary_key')
  loop
    r.pk := pk_seq.nextval;
    r.fk := 'foreign-key';
    insert into table_name values r;
  end loop;
end;

关于sql - 复制同一表中的一行而无需键入 50 多个列名(同时更改 2 列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3780383/

相关文章:

sql - 柱状数据库

mysql - sql唯一复合外键

sql - SUM()/total rows 和 AVG() 在 sql server 之间返回不同的结果

java - 无法从 Java 执行以下查询

sql - 哪个更快/最好? SELECT * 或 SELECT column1、colum2、column3 等

sql - 将三个 bool 列合并为一个枚举列

sql - Oracle 优化器尴尬地不喜欢使用索引

sql - 如果我们只对第一个匹配的子行感兴趣,如何优化 Oracle 中的 JOIN?

oracle - ORA-01008 : not all variables bound (in table adapter with parameterized query)

oracle - 当last_analyzed和stale_stats为空时意味着什么