sql - 如何通过添加序列列来插入列?

标签 sql oracle plsql oracle11g

在 Oracle 数据库 (11gR2) 中,我有一个表 my_table包含列(序列col1col2col3)。我想将从其他表查询的值插入到表中,即 insert into my_table select <query from other tables> 。问题是主键是四列,因此我需要添加一个从 0 开始直到要插入的行数的序列(顺序不是问题)。

我尝试使用这样的循环:

DECLARE
    j    NUMBER;
    r_count number;
BEGIN
    select count(1) into r_count from <my query to be inserted>;
    FOR j IN 0 .. r_count
    LOOP
        INSERT INTO   my_table
              select <my query, incorporating r_count as sequence column> ;
    END LOOP;
END;

但是没用,居然循环了r_count每次都尝试插入整行,从逻辑上讲它应该这样做。如何通过添加序列列来实现预期目标并插入行?

最佳答案

不要循环执行此操作。只需使用row_number():

INSERT INTO my_table(seq, . . .)
     select row_number() over (order by NULL) - 1, . . .
     from . . .;

关于sql - 如何通过添加序列列来插入列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38155778/

相关文章:

java - 如何在 Play java 中创建数据库线程池并使用此池进行数据库查询

mysql - 如何使用mysql随机排序结果?

sql - 为什么 TOP 或 SET ROWCOUNT 使我的查询如此缓慢?

sql - 如何使用新属性值更新 JSON 列?

oracle - 使用Oracle/sqlplus时,在MySQL中显示\G之类的查询结果?

java - 使用来自 0jdbc6 JDBCthin 驱动程序的自定义对象返回类型调用 Oracle PL/SQL 过程

sql - SQL连接中约束放置的性能差异

sql - 为什么有人稍后会在 Oracle 中使用 NoValidate 启用约束

php - MySQL PHP - UTF8数据插入编码

mysql - mysql更新后触发更新不同的表