如何在 SQL Developer 中获取随机外键?
How to get random foreign key in SQL Developer?
在 SQL Developer 中创建所有表后,我需要用至少 10000 个条目填充它们。我对表格没有问题,而不是 FK 为零。
如何从其他表中获取随机值?
select rand() 在此语句中不起作用。但是 max() 会。
CREATE OR REPLACE PROCEDURE NAPOLNI_ARTIKEL
(
ST_ARTIKLOV IN VARCHAR2 DEFAULT 10000
) AS
naziv VARCHAR2(25);
opis VARCHAR2(25);
model VARCHAR2(10);
cena FLOAT(2);
gar INTEGER;
ddv INTEGER;
tip INTEGER;
CURSOR c1 IS
SELECT id_dobavitelj
FROM dobavitelj;
BEGIN
FOR rndx IN c1 LOOP
FOR st IN 1..ST_ARTIKLOV LOOP
naziv := 'naziv';
naziv := naziv ||' '|| TO_CHAR(st);
opis := 'opis';
opis := opis ||' '|| TO_CHAR(st);
model := 'model';
model := model ||' '|| TO_CHAR(st);
cena := dbms_random.value(1.25,230.0);
SELECT NVL(RAND(id_garancija),1)
INTO gar
FROM garancija;
SELECT NVL(RAND(id_ddv),1)
INTO ddv
FROM DDV;
SELECT NVL(RAND(id_tip),1)
INTO tip
FROM tip;
INSERT INTO ARTIKEL(ID_ARTIKLA, NAZIV, OPIS, MODEL, CENA, TIP_ID_TIP, DOBAVITELJ_ID_DOBAVITELJ, GARANCIJA_ID_GARANCIJE, DDV_ID_DDV) VALUES (st, naziv, opis, model, cena, tip, rndx, gar, ddv);
END LOOP;
END LOOP;
END NAPOLNI_ARTIKEL;
* id_artikla INTEGER NOT NULL ,
* naziv VARCHAR2 (25) NOT NULL ,
opis VARCHAR2 (25) ,
* model VARCHAR2 (10) NOT NULL ,
* cena FLOAT (2) NOT NULL ,
F * Tip_id_tip INTEGER NOT NULL ,
F * Dobavitelj_id_dobavitelj INTEGER NOT NULL ,
F Garancija_id_garancije INTEGER ,
F * DDV_id_ddv INTEGER NOT NULL
要从 table 中选择一个随机值,您可以使用随机排序的子查询,然后从中选择第一行:
SELECT id_garancija
INTO gar
FROM (
SELECT id_garancija
FROM garancija
ORDER BY dbms_random.value
)
WHERE rownum = 1;
对于大量数据,您还可以使用 the sample()
clause 来避免必须从 table:
中查找和排序所有值
SELECT id_garancija
INTO gar
FROM garancija
SAMPLE(1)
WHERE rownum = 1;
可以根据table的大小设置样本大小;例如,对于 10000 行,您可以使用 0.1。您可以阅读更多 here.
如果您同时填充父项和子项 table,您可以考虑使用相同的值将 INSERT ALL
语法同时插入到多个 table 中(例如,从序列中)始终如一,而不是稍后再次查找它们。不过,您似乎需要外键的随机组合,因此这在这里可能没有帮助。
在 SQL Developer 中创建所有表后,我需要用至少 10000 个条目填充它们。我对表格没有问题,而不是 FK 为零。 如何从其他表中获取随机值?
select rand() 在此语句中不起作用。但是 max() 会。
CREATE OR REPLACE PROCEDURE NAPOLNI_ARTIKEL
(
ST_ARTIKLOV IN VARCHAR2 DEFAULT 10000
) AS
naziv VARCHAR2(25);
opis VARCHAR2(25);
model VARCHAR2(10);
cena FLOAT(2);
gar INTEGER;
ddv INTEGER;
tip INTEGER;
CURSOR c1 IS
SELECT id_dobavitelj
FROM dobavitelj;
BEGIN
FOR rndx IN c1 LOOP
FOR st IN 1..ST_ARTIKLOV LOOP
naziv := 'naziv';
naziv := naziv ||' '|| TO_CHAR(st);
opis := 'opis';
opis := opis ||' '|| TO_CHAR(st);
model := 'model';
model := model ||' '|| TO_CHAR(st);
cena := dbms_random.value(1.25,230.0);
SELECT NVL(RAND(id_garancija),1)
INTO gar
FROM garancija;
SELECT NVL(RAND(id_ddv),1)
INTO ddv
FROM DDV;
SELECT NVL(RAND(id_tip),1)
INTO tip
FROM tip;
INSERT INTO ARTIKEL(ID_ARTIKLA, NAZIV, OPIS, MODEL, CENA, TIP_ID_TIP, DOBAVITELJ_ID_DOBAVITELJ, GARANCIJA_ID_GARANCIJE, DDV_ID_DDV) VALUES (st, naziv, opis, model, cena, tip, rndx, gar, ddv);
END LOOP;
END LOOP;
END NAPOLNI_ARTIKEL;
* id_artikla INTEGER NOT NULL ,
* naziv VARCHAR2 (25) NOT NULL ,
opis VARCHAR2 (25) ,
* model VARCHAR2 (10) NOT NULL ,
* cena FLOAT (2) NOT NULL ,
F * Tip_id_tip INTEGER NOT NULL ,
F * Dobavitelj_id_dobavitelj INTEGER NOT NULL ,
F Garancija_id_garancije INTEGER ,
F * DDV_id_ddv INTEGER NOT NULL
要从 table 中选择一个随机值,您可以使用随机排序的子查询,然后从中选择第一行:
SELECT id_garancija
INTO gar
FROM (
SELECT id_garancija
FROM garancija
ORDER BY dbms_random.value
)
WHERE rownum = 1;
对于大量数据,您还可以使用 the sample()
clause 来避免必须从 table:
SELECT id_garancija
INTO gar
FROM garancija
SAMPLE(1)
WHERE rownum = 1;
可以根据table的大小设置样本大小;例如,对于 10000 行,您可以使用 0.1。您可以阅读更多 here.
如果您同时填充父项和子项 table,您可以考虑使用相同的值将 INSERT ALL
语法同时插入到多个 table 中(例如,从序列中)始终如一,而不是稍后再次查找它们。不过,您似乎需要外键的随机组合,因此这在这里可能没有帮助。