如何使用顺序在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
);
我需要在 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
);