Podczas procesu modelowania oraz oskryptowywania tworzonej przez nas bazy danych do różnych projektów, możemy się zetknąć z problemem weryfikacji wprowadzonych przez użytkownika informacji. Jako programiści powinniśmy być szczególnie nieufni co do zachowania użytkowników korzystających z naszych produktów. Triggery w bazach danych mogą pomóc nam przeanalizować wprowadzane informacje jeszcze przed umieszczeniem ich wewnątrz tabel.
Poniżej przedstawiam kod mojego autorstwa, którego używam do weryfikacji poprawności numeru PESEL:
ALTER TRIGGER "Sprawdzenie_PESEL" BEFORE INSERT, UPDATE
ORDER 1 ON "DBA"."Lekarz"
REFERENCING NEW AS n
FOR EACH ROW
BEGIN
/* http://pl.wikipedia.org/wiki/PESEL */
DECLARE _pesel CHAR(11);
DECLARE _dl INTEGER; // Dlugosc CHAR-a
DECLARE _il INTEGER; // Iloczyn skladowych
DECLARE _sum INTEGER; // Suma skladowych
SET _pesel = (n.PESEL);
SET _dl = (char_length(n.PESEL));
IF _dl < 11
THEN
signal Podany_PESEL_Jest_Za_Krotki
END IF;
IF _dl > 11
THEN
signal Podany_PESEL_Jest_Za_Dlugi
END IF;
// Jezeli suma iloczynu skladowych i stalych
// Mod 10 jest rowna zeru
// PESEL jest poprawny
SET _il = 1*SUBSTRING(n.PESEL,1,1);
SET _sum = _il;
SET _il = 3*SUBSTRING(n.PESEL,2,1);
SET _sum = _sum + _il;
SET _il = 7*SUBSTRING(n.PESEL,3,1);
SET _sum = _sum + _il;
SET _il = 9*SUBSTRING(n.PESEL,4,1);
SET _sum = _sum + _il;
SET _il = 1*SUBSTRING(n.PESEL,5,1);
SET _sum = _sum + _il;
SET _il = 3*SUBSTRING(n.PESEL,6,1);
SET _sum = _sum + _il;
SET _il = 7*SUBSTRING(n.PESEL,7,1);
SET _sum = _sum + _il;
SET _il = 9*SUBSTRING(n.PESEL,8,1);
SET _sum = _sum + _il;
SET _il = 1*SUBSTRING(n.PESEL,9,1);
SET _sum = _sum + _il;
SET _il = 3*SUBSTRING(n.PESEL,10,1);
SET _sum = _sum + _il;
SET _il = 1*SUBSTRING(n.PESEL,11,1);
SET _sum = _sum + _il;
SET _sum = mod(_sum,10);
IF _sum <> 0
THEN
signal PESEL_JEST_NIEPOPRAWNY
END IF
END
Zachęcam do przeanalizowania.
Chętnie przyjmę wszelkie uwagi :)