Forum » Programiranje » SQL Parent key not found
SQL Parent key not found
Ciklamen ::
Čaos.
Za faks imamo nalogo nardit neko bazo za določeno temo. Težavo imam, ko probam polnit to tabelo s pomočjo procedur (za katero koli število vnosov), češ da ni starševskega ključa (oziroma da tuji ključ ne obstaja). Imam 4 tabele s samimi tujimi ključi, od teh samo ena deluje, če je na njej constraint (t.j. tuj ključ) za 100.000, 1.000.000 in 10.000.000 vnosov, če pa poizkusim napolnit katero koli drugo tabelo pa mi javi napako "integrity constraint (blabla.blabla) violated - parent key not found", kljub temu, da imam pri vseh enako spisan constraint...
Še prilagam kodo, da bo lažje razumevanje kaj sploh delam(o):
Pa še polnjenje:
Any ideas? Jebem se že lep čas s tem, pa ne najdem vzroka kaj bi bilo narobe...
Za faks imamo nalogo nardit neko bazo za določeno temo. Težavo imam, ko probam polnit to tabelo s pomočjo procedur (za katero koli število vnosov), češ da ni starševskega ključa (oziroma da tuji ključ ne obstaja). Imam 4 tabele s samimi tujimi ključi, od teh samo ena deluje, če je na njej constraint (t.j. tuj ključ) za 100.000, 1.000.000 in 10.000.000 vnosov, če pa poizkusim napolnit katero koli drugo tabelo pa mi javi napako "integrity constraint (blabla.blabla) violated - parent key not found", kljub temu, da imam pri vseh enako spisan constraint...
Še prilagam kodo, da bo lažje razumevanje kaj sploh delam(o):
CREATE TABLE TECAJI( ID_TECAJA NUMBER(10) NOT NULL, IME_TECAJA VARCHAR2(30), PODROCJE VARCHAR2(20) ); CREATE TABLE PREDAVANJA( ID_PREDAVANJA NUMBER(10) NOT NULL, IME_PREDAVANJ VARCHAR2(30), OD_KDAJ DATE, DO_KDAJ DATE, TERMIN_OD DATE, TERMIN_DO DATE ); ... CREATE TABLE POUCUJE( ID_PROFESORJA NUMBER(10) NOT NULL, ID_PREDAVANJA NUMBER(10) NOT NULL, ID_TECAJA NUMBER(10) NOT NULL, OBISKANOST NUMBER(5) ); CREATE TABLE LOKACIJA( ID_TECAJA NUMBER(10) NOT NULL, ID_PREDAVANJA NUMBER(10) NOT NULL, LOKACIJA VARCHAR2(20), UCILNICA VARCHAR2(20) ); ALTER TABLE TECAJI ADD (CONSTRAINT PK_TECAJI PRIMARY KEY (ID_TECAJA)); ALTER TABLE PREDAVANJA ADD (CONSTRAINT PK_PREDAVANJA PRIMARY KEY (ID_PREDAVANJA)); ALTER TABLE POUCUJE ADD (CONSTRAINT FK_POUCUJE_ID_PROFESOR FOREIGN KEY (ID_PROFESORJA) REFERENCES OSEBE(ID_OSEBE)); ALTER TABLE POUCUJE ADD (CONSTRAINT FK_POUCUJE_ID_PREDAVANJA FOREIGN KEY (ID_PREDAVANJA) REFERENCES PREDAVANJA(ID_PREDAVANJA)); ALTER TABLE LOKACIJA ADD (CONSTRAINT FK_LOKACIJA_ID_PREDAVANJA FOREIGN KEY (ID_PREDAVANJA) REFERENCES PREDAVANJA(ID_PREDAVANJA)); ALTER TABLE LOKACIJA ADD (CONSTRAINT FK_LOKACIJA_ID_TECAJ FOREIGN KEY (ID_TECAJA) REFERENCES TECAJI(ID_TECAJA));
Pa še polnjenje:
PROCEDURE polni_lokacijo(stevilo_lokacij NUMBER) IS fkID_TECAJA NUMBER(10); fkID_PREDAVANJA NUMBER(10); LOKACIJA VARCHAR2(20); UCILNICA VARCHAR2(20); BEGIN FOR st IN 1..stevilo_lokacij LOOP fkID_TECAJA := dbms_random.value(1, 1000); fkID_PREDAVANJA := dbms_random.value(1,1000); LOKACIJA := 'Lokacija'; UCILNICA := 'Ucilnica'; LOKACIJA := LOKACIJA ||' '|| TO_CHAR(st); UCILNICA := UCILNICA ||' '|| TO_CHAR(st); INSERT INTO LOKACIJA(ID_TECAJA, ID_PREDAVANJA, LOKACIJA, UCILNICA) VALUES (fkID_TECAJA, fkID_PREDAVANJA, LOKACIJA, UCILNICA); END LOOP; END; PROCEDURE polni_poucuje(stevilo_poucevanj NUMBER) IS fkID_PROFESORJA NUMBER(10); fkID_PREDAVANJA NUMBER(10); fkID_TECAJA NUMBER(10); OBISKANOST NUMBER(10); BEGIN FOR st IN 1..stevilo_poucevanj LOOP fkID_PROFESORJA := dbms_random.value(1,1000); fkID_PREDAVANJA := dbms_random.value(1,1000); fkID_TECAJA := dbms_random.value(1,1000); OBISKANOST := dbms_random.value(100,15000); INSERT INTO POUCUJE (ID_PROFESORJA, ID_PREDAVANJA, ID_TECAJA, OBISKANOST) VALUES (fkID_PROFESORJA, fkID_PREDAVANJA, fkID_TECAJA, OBISKANOST); END LOOP; END;
Any ideas? Jebem se že lep čas s tem, pa ne najdem vzroka kaj bi bilo narobe...
- End of the Post ->
dukedl ::
čist možno, da za vrednost fkID_PROFESORJA še ne obstaja ID_OSEBE v tabeli OSEBE, ker ga funkcija naredi naključno (maš očitno ravno tako smolo)?
maš vse idje v tabeli OSEBE napolnjene do 1000?
maš vse idje v tabeli OSEBE napolnjene do 1000?
lp dukedl
Ciklamen ::
Pozabil sem dodat, da za POUCUJE ravno zadeva deluje, za LOKACIJA pa ne (pa so podatki napolnjeni za 1000 vrstic), edino če so indeksi tako zmrdani v LOKACIJA, da noben ključ ne referencira na dane podatke iz predavanj/tečajev? Vidim da sem pozabil še zgoraj en constraint za POUCUJE, ampak kot sem že rekel, ta tabela deluje, vse ostale pa ne...
- End of the Post ->
dukedl ::
torej imaš tabelo TECAJI in PREDAVANJA polni (vseh od 1 do 1000)?
Ker nima veze tle kok maš polno tabelo LOKACIJA (ker se itak polni naključno), morajo pa vsi ključi, ki jih loop dodaja v to tabelo že obstajati v TECAJI in PREDAVANJA.
Ker nima veze tle kok maš polno tabelo LOKACIJA (ker se itak polni naključno), morajo pa vsi ključi, ki jih loop dodaja v to tabelo že obstajati v TECAJI in PREDAVANJA.
lp dukedl
dukedl ::
pa so idji od 1 do 1000 v obeh tabelah (ID_TECAJA, ID_PREDAVANJA)?
al maš samo 1000 vrstic (pa so idji naključni)?
ker ti najbrž random funkcija glih tiste idje poišče, ki ne obstaja ;)
al maš samo 1000 vrstic (pa so idji naključni)?
ker ti najbrž random funkcija glih tiste idje poišče, ki ne obstaja ;)
lp dukedl
Ciklamen ::
Ravno to sem sedaj opazil, da so idji za predavanja 10000(+- 1000) in za tecaji 107000 (+-1000).
Možno je tudi, da sekvence zmrdajo zadeve.. (ki sem sploh pozabil, da jih imam noter :D)
EDIT: visoki IDji so pa zato, ker sem že parkrat polnil tabele z večimi podatki, v upanju da bi kaj pomagalo :D
Možno je tudi, da sekvence zmrdajo zadeve.. (ki sem sploh pozabil, da jih imam noter :D)
EDIT: visoki IDji so pa zato, ker sem že parkrat polnil tabele z večimi podatki, v upanju da bi kaj pomagalo :D
- End of the Post ->
Zgodovina sprememb…
- spremenil: Ciklamen ()
Ciklamen ::
Takle mamo, odstranil sem triggerje (sekvence) in zadeva špila. I'm dumb, pardon :D Sem šele sedaj začel razmišljat, ko sem šel gledat IDje od obeh tabel, da so previsoki...
- End of the Post ->
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | oracle 12 identity (the old way)Oddelek: Programiranje | 1058 (863) | detroit |
» | PostgreSQL pomočOddelek: Programiranje | 2505 (1998) | Mato989 |
» | SQL pomočOddelek: Programiranje | 2390 (1804) | miko22 |
» | SQL težavaOddelek: Programiranje | 5169 (4451) | joseti |
» | SQL problemOddelek: Programiranje | 973 (911) | dejc009 |