Plsql无法插入,因为记录重复
因此,我试图填充一个连接两个不同表的表,从products表中随机选择id x时间量,然后将此id与shops表的id放在一起。然后对shopa表中的所有id重复此操作。这样,每家商店都会随机获得一定数量的产品;但是,因为有时我随机选择的ID与表中已有的ID相同,例如 商店=1 | |产品=34 商店=1 | |产品=20 商店=1 | |产品=34 我要执行的代码是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
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。如果它这样做,它将自动引发一个违反约束的错误