Oracle 只插入一次
我想确保在执行查询时,它只适合一次Oracle 只插入一次,oracle,insert,Oracle,Insert,我想确保在执行查询时,它只适合一次 INSERT INTO SERVICEPAYANT ( TYPE_FLUX, DELAI ) VALUES (160,'9999'); INSERT INTO SERVICEPAYANT ( TYPE_FLUX, DELAI ) VALUES (161,'9999'); INSERT INTO SERVICEPAYANT ( TYPE_FLUX, DELAI ) VALUES (162,'9999'); INSERT INTO SERVICEPAYANT (
INSERT INTO SERVICEPAYANT ( TYPE_FLUX, DELAI ) VALUES (160,'9999');
INSERT INTO SERVICEPAYANT ( TYPE_FLUX, DELAI ) VALUES (161,'9999');
INSERT INTO SERVICEPAYANT ( TYPE_FLUX, DELAI ) VALUES (162,'9999');
INSERT INTO SERVICEPAYANT ( TYPE_FLUX, DELAI ) VALUES (163,'9999');
我可以认为这两列的组合是您的自然键吗?如果是这样,您需要唯一性约束,这将取决于您的数据库实现。您必须将列
TYPE\u FLUX
或DELAI
标记为唯一键
,如果您已经在表中的其他列上有主键
。当您在列TYPE\u FLUX
agin中输入161
时会出现错误,或者当您在列DELAI
中再次输入'9999'
时会出现错误
如果您希望两列的组合是唯一的,那么创建一个组合的
唯一键
,这将永远不会让161和'9999'
一起被再次输入表中,我无法更改此表上的约束谢谢您的回答,但如何通过多次插入来管理它?创建一个过程并在该参数中传递参数类型_FLUX,DELAI。现在,在该过程中使用查询poste dby me,并用查询中的参数替换这些值。请注意,如果有多个并发会话,这不会停止插入重复的值。@Jeffrey,我已经告诉OP使用SP插入记录,以完全保证不会有重复数据。@Romil-否。在存储过程中执行此插入操作不会阻止重复记录的插入。如果要防止重复插入,则您(或其他人)必须向表中添加约束。约束对所有查询都强制执行,而不仅仅是那些在插入之前费心检查是否存在的查询!
INSERT INTO SERVICEPAYANT
(TYPE_FLUX,
DELAI)
SELECT 161,
'9999'
FROM dual
WHERE NOT EXISTS (SELECT 1
FROM SERVICEPAYANT
WHERE TYPE_FLUX = 161
AND DELAI = '9999')