如何使用顺序在oracle中插入多行

How to insert multipleRows in oracle using sequence

我需要在 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: violation de contrainte unique (PHMR.PHMR_VIP_PK)

请问我该如何解决这个问题?我需要使用列 PHMR_VIP_ID 作为序列

执行 bulkInsert

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

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

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

希望这对您有所帮助。

-C§

您可以使用:

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
);