Plsql无法插入,因为记录重复

Plsql无法插入,因为记录重复,plsql,Plsql,因此,我试图填充一个连接两个不同表的表,从products表中随机选择id x时间量,然后将此id与shops表的id放在一起。然后对shopa表中的所有id重复此操作。这样,每家商店都会随机获得一定数量的产品;但是,因为有时我随机选择的ID与表中已有的ID相同,例如 商店=1 | |产品=34 商店=1 | |产品=20 商店=1 | |产品=34 我要执行的代码是 create or replace PROCEDURE GENERATEPRODUCTS AS PRODUCTTEMP N

因此,我试图填充一个连接两个不同表的表,从products表中随机选择id x时间量,然后将此id与shops表的id放在一起。然后对shopa表中的所有id重复此操作。这样,每家商店都会随机获得一定数量的产品;但是,因为有时我随机选择的ID与表中已有的ID相同,例如

商店=1 | |产品=34

商店=1 | |产品=20

商店=1 | |产品=34

我要执行的代码是

 create or replace PROCEDURE GENERATEPRODUCTS
 AS
 PRODUCTTEMP NUMBER;
 NROFPRODUCTS NUMBER;--total number of available products
 NROFWINKELS NUMBER;--total number of shops
 MAXNROFPRODUCT NUMBER;-- the maximum amount of products to be inserted
 PRODUCTPERCENTAGEZONDER NUMBER;-- random percentage that will be added to 90%
 PRODUCTPERCENTAGEMET NUMBER;-- total percentage of to be inserted products
 WINKELS NUMBER;--counter for looping through shops
 PRODUCTIDTEMP NUMBER;--the id of the product that needs to be inserted
 BEGIN
 PRODUCTIDTEMP :=1;
 WINKELS := 1;
 PRODUCTPERCENTAGEMET :=0;
 PRODUCTPERCENTAGEZONDER := 0;
 select count(ID)
 into NROFWINKELS
 FROM WINKEL;
 select count(ID)
 into NrofWinkels
 FROM WINKEL;
 select count(ID)
 into NROFPRODUCTS
 FROM PRODUCT;
 select DBMS_RANDOM.VALUE(0,10) into PRODUCTPERCENTAGEZONDER FROM DUAL;
 PRODUCTPERCENTAGEMET := (90+PRODUCTPERCENTAGEZONDER)*.010;
 MAXNROFPRODUCT:=ROUND(NROFPRODUCTS*PRODUCTPERCENTAGEMET);
 WHILE WINKELS <= NROFWINKELS
 LOOP
 WHILE MAXNROFPRODUCT<=NROFPRODUCTS
 LOOP 
 SELECT ID
 INTO PRODUCTTEMP
 FROM(
 SELECT ID
 FROM PRODUCT
 ORDER BY DBMS_RANDOM.VALUE)
 WHERE ROWNUM=1;
 INSERT INTO WINKEL_COUPON
 ("ID",WINKEL_ID,COUPON_ID)
 VALUES
 (PRODUCTIDTEMP,WINKELS,PRODUCTTEMP);
 PRODUCTIDTEMP := PRODUCTIDTEMP+1;
 END LOOP;
 WINKELS := WINKELS+1;
 END LOOP;
 END;

在这段代码中,我希望每家商店至少获得90%的可用产品

我认为你必须对这张桌子施加限制

这样可以确保某些列中有唯一的值。 例如,如果希望ColumnShop和ColumnProduct的值在表中是唯一的,则必须在表上放置一个contstraint,如下所示:

CONSTRAINT <NameTheConstraint> PRIMARY KEY(Shop, Product)
这样,表将只接受要插入到表中的唯一值。 因此,如果组合还不存在,将插入Shop=1,Product=34。如果它这样做,它将自动引发一个违反约束的错误