SQL error

Programovacie jazyky, rady, poradňa...
bladeboy
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 330
Registrovaný: 01 dec 2006, 20:34

SQL error

Príspevok od používateľa bladeboy »

Ahojte, vie niekto poradit s jednoduchym prikazom v SQL?... Hlási : "No primary key value for foreign key..."
Prip. poslem cely script.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: SQL error

Príspevok od používateľa audiotrack »

ako cudzí kľúč môžeš použiť iba primárny kľúč inej tabuľky. Ty toto pravidlo porušuješ pri vytváraní nejakej tabuľky kde sa snažíš definovať foreign key.
fanky
Novice
Novice
Príspevky: 4
Registrovaný: 25 apr 2010, 15:14

Re: SQL error

Príspevok od používateľa fanky »

VDAKA za radu.. Zda sa vsak, ze toto som neporusil.. Zrada bude niekde inde..
Mmartin
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2786
Registrovaný: 07 feb 2009, 12:49
Bydlisko: Bratislava

Re: SQL error

Príspevok od používateľa Mmartin »

skus ukazat ten script...
fanky
Novice
Novice
Príspevky: 4
Registrovaný: 25 apr 2010, 15:14

Re: SQL error

Príspevok od používateľa fanky »

Vdaka..posielam:

//2. vytvorit pod tymto uzivatelom 3 tabulky.

//2.1. tabulka tab_zmluva (id, cislo zmluvy, datum, poznamka)
DROP TABLE IF EXISTS tab_zmluva
CREATE TABLE tab_zmluva (
id_tab_zmluva INTEGER NOT NULL PRIMARY KEY, //AUTO INCREMENT
cislo_zmluvy INTEGER NOT NULL,
datum DATE,
poznamka VARCHAR(60),
);

//2.2. tabulka tab_typ_splatky (id, typ, nazov)
DROP TABLE IF EXISTS tab_typ_splatky
CREATE TABLE tab_typ_splatky (
id_tab_typ_splatky INTEGER NOT NULL PRIMARY KEY,
typ CHAR(1) NOT NULL,
nazov CHAR(60),
);

//2.3. tabulka tab_splatka (id, id zmluvy, id splatky, suma, datum splatky, poznamka)
DROP TABLE IF EXISTS tab_splatka
CREATE TABLE tab_splatka (
id_tab_splatka INTEGER NOT NULL PRIMARY KEY,
id_zmluva INTEGER NOT NULL,
id_typ_splatky INTEGER NOT NULL,
suma NUMERIC(10,2),
datum_splatky DATE,
poznamka VARCHAR(60),
FOREIGN KEY id_zmluva REFERENCES tab_zmluva (id),
FOREIGN KEY id_typ_splatky REFERENCES tab_typ_splatky (id),
);

//3. vytvorit vazby medzi tabulkami pomocou foreign klucov, nastavit pravo na operacie (select, insert, delete, update) novemu uzivatelovi

GRANT SELECT, INSERT, DELETE, UPDATE ON tab_zmluva TO vali
GRANT SELECT, INSERT, DELETE, UPDATE ON tab_typ_splatky TO vali
GRANT SELECT, INSERT, DELETE, UPDATE On tab_splatka TO vali

//4. naplnit si tabulku s testovacimi datami (cez Insert v SQL)

//tab_zmluva
INSERT INTO tab_zmluva (
id_tab_zmluva,
cislo_zmluvy,
datum,
poznamka )
VALUES
(1001, 201001, '2010-01-01',
'Odber vody na rok 2010' );

INSERT INTO tab_zmluva (
id_tab_zmluva,
cislo_zmluvy,
datum,
poznamka )
VALUES
(1002, 201002, '2010-01-01',
'Odber plynu na rok 2010' );

INSERT INTO tab_zmluva (
id_tab_zmluva,
cislo_zmluvy,
datum,
poznamka )
VALUES
(1003, 201003, '2010-01-01',
'Odber tepla na rok 2010' );

//tab_typ_splatky
INSERT INTO tab_typ_splatky (
id_tab_typ_splatky,
typ,
nazov )
VALUES
(2001, 'P', 'Pravidelna' );

INSERT INTO tab_typ_splatky (
id_tab_typ_splatky,
typ,
nazov )
VALUES
(2002, 'M', 'Mimoriadna' );

INSERT INTO tab_typ_splatky (
id_tab_typ_splatky,
typ,
nazov )
VALUES
(2003, 'D', 'Doplatok' );

//tab_splatka
INSERT INTO tab_splatka
(id_tab_splatka, id_zmluva, id_typ_splatky, suma, datum_splatky, poznamka )
VALUES
(3001, 1001, 2001, 100, '2010-01-10', 'voda za 01/2010');

INSERT INTO tab_splatka
(id_tab_splatka, id_zmluva, id_typ_splatky, suma, datum_splatky, poznamka )
VALUES
(3002, 1002, 2001, 100, '2010-01-10', 'plyn za 01/2010');

INSERT INTO tab_splatka
(id_tab_splatka, id_zmluva, id_typ_splatky, suma, datum_splatky, poznamka )
VALUES
(3003, 1003, 2001, 100, '2010-01-10', 'teplo za 01/2010');

INSERT INTO tab_splatka
(id_tab_splatka, id_zmluva, id_typ_splatky, suma, datum_splatky, poznamka )
VALUES
(3004, 1001, 2002, 200, '2010-02-05', 'voda za 02,03/2010');

INSERT INTO tab_splatka
(id_tab_splatka, id_zmluva, id_typ_splatky, suma, datum_splatky, poznamka )
VALUES
(3005, 1002, 2001, 100, '2010-02-10', 'plyn za 02/2010');

INSERT INTO tab_splatka
(id_tab_splatka, id_zmluva, id_typ_splatky, suma, datum_splatky, poznamka )
VALUES
(3006, 1003, 2001, 80, '2010-02-10', 'teplo zaloha za 02/2010');

INSERT INTO tab_splatka
(id_tab_splatka, id_zmluva, id_typ_splatky, suma, datum_splatky, poznamka )
VALUES
(3007, 1002, 2001, 100, '2010-03-10', 'plyn za 03/2010');

INSERT INTO tab_splatka
(id_tab_splatka, id_zmluva, id_typ_splatky, suma, datum_splatky, poznamka )
VALUES
(3008, 1003, 2001, 20, '2010-03-10', 'teplo doplatok za 02/2010');

INSERT INTO tab_splatka
(id_tab_splatka, id_zmluva, id_typ_splatky, suma, datum_splatky, poznamka )
VALUES
(3009, 1003, 2001, 100, '2010-03-10', 'teplo za 03/2010');

//5. vytvorit funkciu ktora vrati pre danu zmluvu (parameter),
// celkovu sumu jej splatok
SELECT * FROM tab_zmluva WHERE tab_zmluva.cislo_zmluvy=201001

//DEFINUJEME PROPERTY
BEGIN
DECLARE @cislo_zmluvy int;
SET @cislo_zmluvy = 201001;

CREATE FUNCTION spl_total ( @Cislo_zmluvy INTEGER)
RETURNS NUMBER
BEGIN
DECLARE @total NUMBER;
SELECT SUM(SUMA)INTO @total FROM tab_splatka WHERE tab_zmluva.cislo_zmluvy = @Cislo_zmluvy
RETURN number
END
END

//
SELECT SUM(SUMA)FROM tab_splatka WHERE tab_splatka.id_zmluva = 1001

//autoeditácia príspevku (25 Apr 2010, 17:08)
na tomto riadku :
INSERT INTO tab_splatka
(id_tab_splatka, id_zmluva, id_typ_splatky, suma, datum_splatky, poznamka )
VALUES
(3001, 1001, 2001, 100, '2010-01-10', 'voda za 01/2010');

zahlasi: No primary key value for foreign key..
Mmartin
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2786
Registrovaný: 07 feb 2009, 12:49
Bydlisko: Bratislava

Re: SQL error

Príspevok od používateľa Mmartin »

no v prvom rade to editni do code... takto to nikto citat nebude
fanky
Novice
Novice
Príspevky: 4
Registrovaný: 25 apr 2010, 15:14

Re: SQL error

Príspevok od používateľa fanky »

medzi tym..teda uz v poslanom skripte som zmenil nazvy primarnych klucov vo vsetkych tabulkach tak, aby bol kazdy inak nazvany..zda sa ze toto bol problrem..inak povedane..zda sa ze primarny kluc v 2 resp. viacerych tabulkach, nesmie mat pri pouziti FOREIGN KEY rovnaky nazov..

//autoeditácia príspevku (25 Apr 2010, 17:15)
"editni do code" ... v SQL som zaciatocnik, ako to urobim ?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: SQL error

Príspevok od používateľa audiotrack »

duplicitný účet? IP máte rovnaké, čakám vysvetlenie a spolu s vysvetlením si aj vyber ktorý z tých dvoch mám zabanovať
fanky
Novice
Novice
Príspevky: 4
Registrovaný: 25 apr 2010, 15:14

Re: SQL error

Príspevok od používateľa fanky »

ked uz musis tak tento..syn je pri PC a ja pri notasi..

//autoeditácia príspevku (25 Apr 2010, 17:24)
este prosba..oboznamujem sa s SQL a potrebujem urobit vzorovy script..pomohla by nejaka inspiracia..Nevies poradit kde najdem nejake ukazkove scripty ?
sharky-no
King
King
Používateľov profilový obrázok
Príspevky: 1681
Registrovaný: 31 okt 2006, 19:53

Re: SQL error

Príspevok od používateľa sharky-no »

do code mas dat ten script tuna na fore

Kód: Vybrať všetko

toto je v code 
a tutorial na sql je napr tu: http://www.w3schools.com/Sql/sql_create_table.asp
a vela dalsich uzitocnych info
Jasty
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 240
Registrovaný: 13 mar 2008, 19:22

Re: SQL error

Príspevok od používateľa Jasty »

nechybaju ti tam aj constraints?
__construct
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 108
Registrovaný: 23 sep 2009, 9:32
Bydlisko: Dark Side of The Moon
Kontaktovať používateľa:

Re: SQL error

Príspevok od používateľa __construct »

Jasty napísal:nechybaju ti tam aj constraints?
Nechýba - je to nepovinné ..
Napísať odpoveď