Hej,
stanęło przede mną zadanie o następującej treści:
Utwórz relację OSOBY o następującej strukturze:
a. PESEL łańcuch znakowy 11-znakowy (stała dł.)
b. IMIE łańcuch znakowy 15-znakowy (zmienna dł.)
c. NAZWISKO łańcuch znakowy 15-znakowy (zmienna dł.)
d. DATA_URODZENIA data
Ponadto, podczas tworzenia nowej relacji zdefiniuj następujące ograniczenia integralnościowe:
e. PESEL musi liczyć dokładnie 11 znaków
f. pierwsze dwie cyfry numeru PESEL muszą być takie same, jak ostatnie dwie cyfry roku w atrybucie DATA_URODZENIA
g. kolejne dwie cyfry numery PESEL muszą być takie same, jak numer miesiąca w atrybucie DATA_URODZENIA
h. kolejne dwie cyfry numeru PESEL muszą być takie same, jak numer dnia w atrybucie DATA_URODZENIA
i. atrybut PESEL jest kluczem głównym relacji
j. atrybuty IMIĘ i NAZWISKO muszą być wypełnione (niepuste)
Napisałem kod, ale niestety moje podejście do sprawdzania poszczególnych fragmentów PESELU niestety otrzymuję komunikat "ERROR: function left(date, integer) does not exist". Jak rozwiązać ten problem w poniższym kodzie? :)
create table OSOBY (
PESEL char(11) primary key,
IMIE varchar(15) not null,
NAZWISKO varchar(15) not null,
DATA_URODZENIA date,
constraint ZLA_DLUGOSC_PESEL check (lenght(PESEL) = 11),
constraint ZLY_ROK_PESEL check (left(PESEL, 2) = right((left(DATA_URODZENIA ,4),2)),
constraint ZLY_MIESIAC_PESEL check (right(left(PESEL, 4),2) = right(left(DATA_URODZENIA, 7), 2)),
constraint ZLY_DZIEN_PESEL check (right (left(PESEL, 6),2) = right(left(DATA_URODZENIA, 10), 2))
);