Create i Insert PL/SQL Oracle

Odpowiedz Nowy wątek
2015-01-19 20:43
0

Witam, stworzyłem następującą bazę danych

DROP TABLE klu_sta;
DROP TABLE Stadiony;
DROP TABLE Trenerzy;
DROP TABLE klu_spo;
DROP TABLE Sponsorzy;
DROP TABLE klu_pil;
DROP TABLE Pilkarze;
DROP TABLE Kluby;
DROP TABLE Liga;

DROP SEQUENCE sta;
DROP SEQUENCE tre;
DROP SEQUENCE spo;
DROP SEQUENCE pil;
DROP SEQUENCE klu;
DROP SEQUENCE lig;

------------------------------------CREATE--------------------------------------
CREATE TABLE Liga(
Id_ligi NUMBER CONSTRAINT liga_pk PRIMARY KEY,
Kraj VARCHAR(30) NOT NULL,
Nazwa_ligi VARCHAR(20) NOT NULL
);

CREATE TABLE Kluby(
Id_klubu NUMBER CONSTRAINT klub_pk PRIMARY KEY,
Nazwa_klubu VARCHAR(30) NOT NULL,
Id_ligi NUMBER NOT NULL,
CONSTRAINT kl_li_fk FOREIGN KEY (Id_ligi) REFERENCES Liga(Id_ligi)
);

CREATE TABLE Pilkarze(
Id_pilkarza NUMBER CONSTRAINT pilkarz PRIMARY KEY,
Imie_pilkarza VARCHAR(15) NOT NULL,
Nazwisko_pilkarza VARCHAR(20),

Pozycja VARCHAR(3) NOT NULL
);

CREATE TABLE klu_pil(
Id_klubu NUMBER CONSTRAINT klub_fk REFERENCES Kluby(Id_klubu),
Id_pilkarza NUMBER CONSTRAINT pilkarz_fk REFERENCES Pilkarze(Id_pilkarza),
CONSTRAINT klu_pil_pk PRIMARY KEY (Id_klubu, Id_pilkarza)
);

CREATE TABLE Sponsorzy(
Id_sponsora NUMBER CONSTRAINT sponsor_pk PRIMARY KEY,
Nazwa_sponsora VARCHAR(35) NOT NULL
);

CREATE TABLE klu_spo(
Id_klubu NUMBER CONSTRAINT klub_spo_fk REFERENCES Kluby(Id_klubu),
Id_sponsora NUMBER CONSTRAINT sponsor_fk REFERENCES Sponsorzy(Id_sponsora),
CONSTRAINT klu_spo_pk PRIMARY KEY(Id_klubu,Id_sponsora)
);

CREATE TABLE Trenerzy(
Id_klubu NUMBER CONSTRAINT tren_pk PRIMARY KEY,
Imie_trenera VARCHAR(20) NOT NULL,
Nazwisko_trenera VARCHAR(20) NOT NULL,
Wiek_trenera NUMBER NOT NULL
);

CREATE TABLE Stadiony(
Id_stadionu NUMBER NOT NULL constraint stadion_pk PRIMARY KEY,
Nazwa_stadionu VARCHAR(20),
Ulica VARCHAR(20),
Adres VARCHAR(7)
);

CREATE TABLE klu_sta(
Id_klubu NUMBER CONSTRAINT klu_sta_fk REFERENCES Kluby(Id_klubu),
Id_stadionu NUMBER CONSTRAINT stadion_fk REFERENCES Stadiony(id_stadionu),
CONSTRAINT klu_sta_pk PRIMARY KEY(Id_klubu, Id_stadionu)
);

-------------------------------SEQUENCE-----------------------------------------
CREATE SEQUENCE lig
START WITH 1
INCREMENT BY 1;

CREATE SEQUENCE klu
START WITH 1
INCREMENT BY 1;

CREATE SEQUENCE pil
START WITH 1
INCREMENT BY 1;

CREATE SEQUENCE spo
START WITH 1
INCREMENT BY 1;

CREATE SEQUENCE tre
START WITH 1
INCREMENT BY 1;

CREATE SEQUENCE sta
START WITH 1
INCREMENT BY 1; 
--------------------------------DELETE------------------------------------------
DELETE FROM klu_sta;
DELETE FROM Stadiony;
DELETE FROM Trenerzy;
DELETE FROM klu_spo;
DELETE FROM Sponsorzy;
DELETE FROM klu_pil;
DELETE FROM Pilkarze;
DELETE FROM Kluby;
DELETE FROM Liga;

--------------------------------INSERT------------------------------------------

------------LIGA---------------
INSERT INTO Liga VALUES(lig.NEXTVAL,'Anglia','Premier League');
INSERT INTO Liga VALUES(lig.NEXTVAL,'Francja','Ligue 1');
INSERT INTO Liga VALUES(lig.NEXTVAL,'Niemcy','Bundesliga');
INSERT INTO Liga VALUES(lig.NEXTVAL,'Polska','Ekstraklasa');
INSERT INTO Liga VALUES(lig.NEXTVAL,'Portugalia','Superliga');
INSERT INTO Liga VALUES(lig.NEXTVAL,'Hiszpania','La Liga');

------------KLUBY---------------
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Arsenal',1);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Aston Villa',1);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Burnley',1);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Chelsea',1);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Crystal Palace',1);

INSERT INTO Kluby VALUES(klu.NEXTVAL,'Bastia',2);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Bordeaux',2);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Caen',2);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Evian',2);

INSERT INTO Kluby VALUES(klu.NEXTVAL,'Augsburg',3);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Bayer Leverkusen',3);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Bayern',3);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Borussia Dortmund',3);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Eintracht Frankfurt',3);

INSERT INTO Kluby VALUES(klu.NEXTVAL,'Jagiellonia Białystok',4);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Korona Kielce',4);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Lech Poznań',4);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Lechia Gdańsk',4);

INSERT INTO Kluby VALUES(klu.NEXTVAL,'Académica',5);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Arouca',5);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Belenenses',5);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Benfica',5);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Boavista',5);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Braga',5);

INSERT INTO Kluby VALUES(klu.NEXTVAL,'UD Almería',6);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Athletic Club',6);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Club Atlético',6);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'FC Barcelona',6);
INSERT INTO Kluby VALUES(klu.NEXTVAL,'Real Club Celta',6);

------------PILKARZE------------------------------------------------------------
--Arsenal
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Wojciech','Szczęsny','BR');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Mathieu', 'Debuchy','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Kieran', 'Gibbs','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Per', 'Mertesacker','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Laurent','Koscielny','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Tomáš','Rosický','PO');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Mikel','Arteta','PO');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Jack','Wilshere','PO');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Mesut','Özil','PO');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Olivier','Giroud','NA');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'David','Ospina','BR');
--Aston Villa
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Brad','Guzan','BR');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Nathan','Baker','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Jores','Okore', 'NA');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Ciaran','Clark','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Leandro','Bacuna','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Tom','Cleverley','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Andreas', 'Weimann','NA');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Joe', 'Cole','PO');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Brad','Guzan','PO');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Philippe' ,'Senderos','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Brad','Guzan','BR');
--Burnley
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Tom','Heaton','BR');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Kieran','Trippier','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Daniel','Lafferty','NA');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Michael','Duff','PO');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Jason','Shackell','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Ben','Mee','OB');
--Chelsea
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Petr', 'Čech','BR');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Branislav','Ivanović','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Cesc','Fabregas','PO');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Didier','Drogba','NA');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Thibaut','Courtois','BR');
--Crystal Palace
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Julián','Speroni','BR');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Joel','Ward','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'JYannick','Bolasie','PO');

--Bastia
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Alphonse','Aréola','BR');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Romain','Achilli','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Hervin','Ongenda ','NA');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Florian','Marange','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Sébastien','Squillaci','OB');
--Bordeaux
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Ažbej','Jug','BR');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Diego','Contento','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Nicolas','Pallois','OB');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Urugwaj','Diego Rolán','NA');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Henri','Saivet','NA');
INSERT INTO Pilkarze VALUES(pil.NEXTVAL,'Younes','Kaabouni','PO');

------------klu_pil-------------------------------------------------------------
INSERT INTO klu_pil VALUES(1,2);
INSERT INTO klu_pil VALUES(2,2);
INSERT INTO klu_pil VALUES(2,1);

------------SPONSORZY-----------------------------------------------------------
INSERT INTO Sponsorzy VALUES(1,'Nike');
INSERT INTO Sponsorzy VALUES(2,'Adidas');

------------klu_spo-------------------------------------------------------------
INSERT INTO klu_spo VALUES(1,2);
INSERT INTO klu_spo VALUES(2,2);
INSERT INTO klu_spo VALUES(1,1);
INSERT INTO klu_spo VALUES(1,2);
INSERT INTO klu_spo VALUES(2,1);

------------TRENERZY------------------------------------------------------------
INSERT INTO Trenerzy VALUES(tre.NEXTVAL,'Arse`ne','Wenger',66);
INSERT INTO Trenerzy VALUES(tre.nextval,'Paul','Lambert',46);
INSERT INTO Trenerzy VALUES(tre.nextval,'Sean','Dyche',44);
INSERT INTO Trenerzy VALUES(tre.nextval,'José','Mourinho',62);
INSERT INTO Trenerzy VALUES(tre.nextval,'Alan','Pardew',64);
INSERT INTO Trenerzy VALUES(tre.nextval,'Roberto','Martinez',42);

------------STADIONY------------------------------------------------------------
INSERT INTO Stadiony VALUES(sta.NEXTVAL,'Stamford Bridge','Fullham Road','SW6 1HS');
INSERT INTO Stadiony VALUES(sta.NEXTVAL,'Goodison Park','Goodison Road','L4 4EL');

------------klu_sta-------------------------------------------------------------
INSERT INTO klu_sta VALUES(4,1);
INSERT INTO klu_sta VALUES(6,2);

SELECT Kraj,Nazwa_klubu FROM Liga, Kluby WHERE Liga.Id_ligi = Kluby.Id_ligi AND Id_ligi =1;

Create działa bez zarzutu(o ile dobrze go napisałem, prosiłbym o ew. sugestie, korektę).
Przy Insert problem pojawia się w lini 142- INSERT INTO klu_spo VALUES(1,2); ORA-00001: unique constraint (SYSTEM.KLU_SPO_PK) violated oraz przy próbnym select ORA-00918: column ambiguously defined

Za drugim razem przy próbie wywołania Insert pojawia się już znacznie więcej błędów 25-63,128-130,139-143,158-159. Problem jest taki sam wszędzie:ORA-02291: integrity constraint (SYSTEM.STADION_FK) violated - parent key not found.

Za każdym razem muszę usuwać i tworzyć tabelę od nowa, a potem insertować. Szukałem tych błędów na necie, ale nie mogłem nic znaleźć w miarę jasno wyjaśnionego(tak, abym potrafił zrozumieć i poprawić te błędy). Prosiłbym o pomoc co jest nie tak.

Pozostało 580 znaków

2015-01-19 21:51
Ldr
1

Przeciez bledy mowia wszystko

INSERT INTO klu_spo VALUES(1,2); ORA-00001: unique constraint (SYSTEM.KLU_SPO_PK) - lamiesz zalozenia klucza glownego probujac insertowac drugi raz takie same dane do kolumny PK. W tym wypadku klucz jest kompozytowy a Ty wywolujesz dwa razy

INSERT INTO klu_spo VALUES(1,2); 

ORA-02291: integrity constraint (SYSTEM.STADION_FK) violated - parent key not found. - Naruszasz warunek FK, insertujesz wartosc ktorej nie ma w tabeli nadrzednej.

Poza tym chyba cos slabo szukales

https://www.google.pl/webhp?t[...]Q1S4#safe=off&q=ORA-02291
https://www.google.pl/webhp?t[...]Q1S4#safe=off&q=ORA-00001
https://www.google.pl/webhp?t[...]Q1S4#safe=off&q=ORA-00918

Pozostało 580 znaków

2015-01-19 22:24
0

Nie zauważyłem, że próbuje wstawić tą samą wartość :). Jeśli chodzi ORA-02291: integrity constraint (SYSTEM.STADION_FK) violated - parent key not found. - Naruszasz warunek FK, insertujesz wartosc ktorej nie ma w tabeli nadrzednej. Rozumiem już, jak usuwam z inserta i chcę dalej insertować, to licznik dalej zwiększa swoją wartość - stąd problem z brakiem odpowiedniej wartości nadrzędnej.

Jeśli mógłbym prosić o coś jeszcze to problem z tym przykładowym selectem SELECT Kraj,Nazwa_klubu FROM Liga, Kluby WHERE Liga.Id_ligi = Kluby.Id_ligi AND Id_ligi =1;

ORA-00918: column ambiguously defined

Nadal tego nie rozumiem. Niestety większość w googlach jest po angielsku, a ten u mnie kuleje. Po polsku znalazłem jedynie pdf, w którym jest ten błąd wyjaśniony, ale go nie rozumiem, nazwy kolumn mam inne, wydaje mi się, że powinno to działać

Pozostało 580 znaków

2015-01-19 22:31
Ldr
1
  1. Zapoznaj sie z konstrukcja JOINa
  2. Uzywaj aliasow

W dwoch tabelach z których selekcisz sa kolumny o takich samych nazwach, w tym przypadku pewnie id_ligi. Zadajesz AND Id_ligi =1; nie wskazujac z ktorej tabeli id ma byc rowny 1.

Jesli slabo z angielskim stoisz łap za słownik, bez czytania dokumentacji ciezko bedzie Ci sie uczyc sqla

Pozostało 580 znaków

2015-01-19 22:40
0

Jejciu, naprawdę bardzo dziękuję. Myślałem na początku, że błąd leży gdzieś w select i where przed AND, nie brałem pod uwagę drugiego warunku. Dopiero zaczynam naukę angielskiego, więc na razie idzie mi dość ślamazarnie.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0