Sql 使用带别名和序列的asubselect插入子查询中的所有行

Sql 使用带别名和序列的asubselect插入子查询中的所有行,sql,oracle,plsql,plsqldeveloper,Sql,Oracle,Plsql,Plsqldeveloper,我遇到了一个问题,在一个有序列的表上使用子查询和子选择来插入表。以下是我的代码的简化版本: INSERT INTO my_table (sequence_id, product_code, product_status) SELECT sequence_id.NEXTVAL, alias_table.* from (SELECT product_code, product_status, FROM products

我遇到了一个问题,在一个有序列的表上使用子查询和子选择来插入表。以下是我的代码的简化版本:

 INSERT INTO my_table
     (sequence_id,
     product_code,
     product_status)
 SELECT 
     sequence_id.NEXTVAL,
     alias_table.* from (SELECT
     product_code, 
     product_status,
 FROM products
 WHERE product_code = '123456') alias_table;
我遇到的主要问题是序列,因为这个查询将返回多行,我需要序列前进。非常感谢您的帮助

试试这个(我没有测试)

INSERT ...
SELECT 
 sequence_id.NEXTVAL,
 product_code, 
 product_status
FROM products
WHERE product_code = '123456';

创建触发器以插入下一个序列值:

CREATE OR REPLACE TRIGGER my_schema.my_table_ins_trg
   BEFORE INSERT ON my_schema.my_table FOR EACH ROW
   WHEN (New.ID IS NULL) 
BEGIN
  SELECT my_schema.sequence_id.Nextval INTO :New.ID FROM dual;
END;
然后可以从插入查询中删除序列:

 INSERT INTO my_table
     (product_code,
      product_status)
 SELECT alias_table.* FROM (SELECT product_code, product_status
                              FROM products
                             WHERE product_code = '123456') alias_table;

我最初尝试过这种方法,但它给了我一个ORA-02287错误“此处不允许使用序列号”。是否尝试运行简化代码?它对我来说很有用,@koljaTM的代码和我的代码也是一样。我们实际上打算使用一个触发器,但我们不想为DBA添加另一个需要维护的东西。我实际上使用了下面T.S.建议的方法。谢谢你的回答@用户2600900很高兴您找到了解决方案。:)
 INSERT INTO my_table
     (product_code,
      product_status)
 SELECT alias_table.* FROM (SELECT product_code, product_status
                              FROM products
                             WHERE product_code = '123456') alias_table;