【问题标题】:How to insert multipleRows in oracle using sequence如何使用序列在oracle中插入多行
【发布时间】:2025-11-21 16:50:02
【问题描述】:

我需要在oracle数据库中插入多行,我使用这个命令行:

INSERT ALL
  INTO PHMR_VIP (PHMR_VIP_ID,PHMR_VIP_NOM,PHMR_VIP_PRENOM) VALUES (SQ_PHMR_VIP.nextval, 'dfdf', 'dfdfd')
  INTO PHMR_VIP (PHMR_VIP_ID,PHMR_VIP_NOM,PHMR_VIP_PRENOM) VALUES (SQ_PHMR_VIP.nextval, 'ffdf', 'dfdf')
  INTO PHMR_VIP (PHMR_VIP_ID,PHMR_VIP_NOM,PHMR_VIP_PRENOM) VALUES (SQ_PHMR_VIP.nextval, 'mohfdfd','fdfdf')
SELECT * FROM dual;

但是,我有 oracle 错误:

ORA-00001:违反唯一性约束 (PHMR.PHMR_VIP_PK)

请问我该如何解决?我需要使用 PHMR_VIP_ID 列作为序列进行 bulkInsert

【问题讨论】:

    标签: sql oracle sql-insert bulkinsert


    【解决方案1】:

    你可以使用:

    INSERT INTO PHMR_VIP (PHMR_VIP_ID,PHMR_VIP_NOM,PHMR_VIP_PRENOM) 
    SELECT SQ_PHMR_VIP.nextval, col1, col2
    FROM (
      SELECT 'dfdf' AS col1, 'dfdfd' AS col2 FROM dual
      UNION ALL 
      SELECT 'ffdf', 'dfdf'    FROM dual
      UNION ALL 
      SELECT 'mohfdfd','fdfdf' FROM dual
    );
    

    【讨论】:

    • 我有这个错误ORA-02287: numéro de séquence non autorisé ici
    • 我现在有这个错误ORA-00933: la commande SQL ne se termine pas correctement
    • @user1428798 上次尝试,我删除了别名。现在应该可以工作了:)
    【解决方案2】:

    对于某些人,您必须使用SELECT 1 FROM dual; 而不是SELECT * FROM dual;。请参阅此参考:https://community.oracle.com/thread/2457262。这是因为 dual 中只有 1 行。

    但在这种情况下这并没有帮助,因为您不能使用带有 SELECT ALL 的序列,根据这篇文章:https://community.oracle.com/thread/1038439,至少不是您的方式。如果您有一个触发器可以捕获每个 nextval 调用并手动更新值,则可以,但正如帖子中进一步提到的那样,它会降低性能。

    建议使用多个插入而不是全部插入。

    希望这会有所帮助。

    -C§

    【讨论】:

      最近更新 更多