Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ORA-02291:naruszono wiezy integralnosci

1,538 views
Skip to first unread message

ma...@o2.pl

unread,
Aug 8, 2006, 5:50:50 AM8/8/06
to
Witam,
Mam bazke na Oracle 9.2. W schemacie TEST mam m.in tabele
zamowienia_pozycje i stawki_vat.
Kiedy robie inserta:

INSERT INTO ZAMOWIENIA_POZYCJE
(ZAMOWIENIE_ID,OPERATOR_ID,POZYCJA_ASORTYMENTOWA_ID,POZYCJA_CENNIKA_ID,CENA,WARTOSC_WSPOLCZYNNIKOW,STAWKA_VAT_ID,
STATUS_POZYCJI_ZAMOWIENIA_ID,LICZBA_SZTUK,ZLOZONA_NAZWA_POZYCJI)
VALUES (4,1,6,1,2,1,1,1,1,'test')

Oracle rzuca mi blad:
"ORA-02291: naruszono wiezy integralnosci
(TEST.ZAM_POZ_STAWKA_VAT_FK) - nie znaleziono klucza nadrzednego\n"

Constraint ZAM_POZ_STAWKA_VAT_FK wrzucony do skryptu wyglada tak:
--ZAM_POZ_STAWKA_VAT_FK
--
ALTER TABLE ZAMOWIENIA_POZYCJE ADD (
CONSTRAINT ZAM_POZ_STAWKA_VAT_FK FOREIGN KEY (STAWKA_VAT_ID)
REFERENCES FAKTURY_VAT (ID));


Czy moze mi ktos powiedziec, dlaczego ten constraint blokuje mojego
inserta?

Marcin 'goral' Goralski

unread,
Aug 8, 2006, 5:57:04 AM8/8/06
to

A istnieje w tablicy FAKTURY_VAT faktura o ID=1 ?

marcin

ma...@o2.pl

unread,
Aug 8, 2006, 6:09:13 AM8/8/06
to

Marcin 'goral' Goralski napisał(a):

Nie, tablica FAKTURY_VAT jest pusta, gdyż wpis do niej ma nastąpić
już po tym insercie który chcę wykonać. Baza do tej pory
działała, jedyne co zrobiłem to wyczyściłem zawartości kolumn i
ustawiłem od nowa wartości sekwencji.Od tej chwili mam problem z tym
constraintem. Co dokładnie chce wymusić ten constraint ?

Marcin 'goral' Goralski

unread,
Aug 8, 2006, 6:23:52 AM8/8/06
to
ma...@o2.pl wrote:

> Nie, tablica FAKTURY_VAT jest pusta, gdyż wpis do niej ma nastąpić
> już po tym insercie który chcę wykonać.

Wlasnie.

> constraintem. Co dokładnie chce wymusić ten constraint ?

To, co z reguly wymusza klucz obcy.

marcin

ma...@o2.pl

unread,
Aug 8, 2006, 7:23:48 AM8/8/06
to

> To, co z reguly wymusza klucz obcy.
>
> marcin

Nadal nie rozumiem. Tablica zamowienia_pozycje ma dwie istotne kolumny:
1.stawka_vat_id - przez co wiąże się z tabelą stawki_vat
2.faktura_vat_id - przez co wiąże się z tabelą faktury_vat.(Moze
byc rowna null).

Co zatem oznacza wpis:

ALTER TABLE ZAMOWIENIA_POZYCJE ADD (
CONSTRAINT ZAM_POZ_STAWKA_VAT_FK FOREIGN KEY (STAWKA_VAT_ID)
REFERENCES FAKTURY_VAT (ID));

Że kolumna stawka_vat_id z tabeli ZAMOWIENIA_POZYCJE zawiera klucz
obcy z tabeli FAKTURY_VAT ? Przecież tak nie jest. Skąd wogóle się
biorą te constrainty?

Marcin 'goral' Goralski

unread,
Aug 8, 2006, 7:30:23 AM8/8/06
to
ma...@o2.pl wrote:
>> To, co z reguly wymusza klucz obcy.
>>
>> marcin
>
> Nadal nie rozumiem. Tablica zamowienia_pozycje ma dwie istotne kolumny:

Proponuje doczytac troche o kluczach obcych.

>
> ALTER TABLE ZAMOWIENIA_POZYCJE ADD (
> CONSTRAINT ZAM_POZ_STAWKA_VAT_FK FOREIGN KEY (STAWKA_VAT_ID)
> REFERENCES FAKTURY_VAT (ID));

Widac tu klucz obcy do tablicy faktury_vat.

>
> Że kolumna stawka_vat_id z tabeli ZAMOWIENIA_POZYCJE zawiera klucz
> obcy z tabeli FAKTURY_VAT ? Przecież tak nie jest. Skąd wogóle się
> biorą te constrainty?

Panie, a skad to ja mam wiedziec ? Czy to ja projektowalem to cos ?
Widocznie takie byly wymagania projektowe, tak zostala zrozumiana logika
i funkcjonalnosc, i, sadzac po nazwach tablic, calkiem slusznie.
STAWKA_VAT_ID jest kluczem obcym do tablicy FAKTURY_VAT, odnoszacym sie
do pola ID tejze tablicy i najprawdopodobniej bedacym kluczem glownym
tejze tabeli.
Prosze troche doczytac, w zrozumieniu moze pomoc przyklad _relacji_
pomiedzy rodzicem i dzieckiem (dziecmi). Rodzic moze, lecz nie musi
miec dzieci. Dziecko musi miec rodzicow (nie rozpatrujemy tutaj
przypadkow medycznych sztucznego zaplodnienia)

marcin

ma...@o2.pl

unread,
Aug 8, 2006, 7:55:27 AM8/8/06
to

>
> Panie, a skad to ja mam wiedziec ? Czy to ja projektowalem to cos ?
> Widocznie takie byly wymagania projektowe, tak zostala zrozumiana logika
> i funkcjonalnosc, i, sadzac po nazwach tablic, calkiem slusznie.
> STAWKA_VAT_ID jest kluczem obcym do tablicy FAKTURY_VAT, odnoszacym sie
> do pola ID tejze tablicy i najprawdopodobniej bedacym kluczem glownym
> tejze tabeli.


Ale jaka w tym logika? STAWKA_VAT_ID powinna być kluczem do tablicy
STAWKI_VAT odnoszącym się do jej pola ID, a nie do jakiejś z kosmosu
wziętej tabeli FAKTURY_VAT.
Wywaliłem tego constrainta. Ale dzięki za odpowiedź, bo pomogła mi
sporo zajarzyć.

Pozdrawiam,
Marcin

Marcin 'goral' Goralski

unread,
Aug 8, 2006, 8:00:25 AM8/8/06
to
ma...@o2.pl wrote:

> Ale jaka w tym logika?

Panie, a skad ja do cholery mam wiedziec ? Nie projektowalem tej
aplikacji/systemu.

> STAWKA_VAT_ID powinna być kluczem do tablicy
> STAWKI_VAT odnoszącym się do jej pola ID,

Niech sie Pan lepiej zapyta producenta, co powinno a co nie.


> Wywaliłem tego constrainta. Ale dzięki za odpowiedź, bo pomogła mi
> sporo zajarzyć.

Jesli to system dostarczany przez inna firme, to prosze sie nie zdziwic,
jesli odmowia supportu. Do tego, powiem Panu szczerze ... wylecialby
Pan u mnie z roboty jak nic, gdyby modyfikowal Pan sobie logike
aplikacji/systemy ze wzgledu na to, co sie Panu wydaje.

Niemniej, ciesze sie, ze pojal Pan istote dzialania kluczy obcych.

marcin

Sławomir Szyszło

unread,
Aug 8, 2006, 2:45:36 PM8/8/06
to
Dnia 8 Aug 2006 04:55:27 -0700, ma...@o2.pl wklepał(-a):

>Ale jaka w tym logika? STAWKA_VAT_ID powinna być kluczem do tablicy
>STAWKI_VAT odnoszącym się do jej pola ID, a nie do jakiejś z kosmosu
>wziętej tabeli FAKTURY_VAT.
>Wywaliłem tego constrainta. Ale dzięki za odpowiedź, bo pomogła mi
>sporo zajarzyć.

Z tego co ja rozumiem, to stawka VAT w pozycji zamówienia (czymkolwiek to jest)
musi być taka sama jak w "źródłowej" (?) fakturze VAT.

A jak nie znasz zależności logicznych między tabelami, to nie wstawiaj rekordów
"z ręki".
--
Sławomir Szyszło mailto:slas...@poczta.onet.pl
Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych
FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/
Archiwum http://groups.google.com/groups?group=pl.comp.bazy-danych

0 new messages