Trigger sprawdzający poprawność danych

0

Czesc wszystkim!
Po dlugiej walce musialem skierowac się tutaj. Przypuszczam, ze zapytam o bardoz prostą rzecz.
Mamy tabele budynkow i kolumne powierzchni. Chcialbym, zeby po wpisaniu wartosci "0" w powierzchnie, wyskoczyl komunikat, ze "nie moze byc powierzchni rownej 0".
Przerobilem juz chyba wszystkie poradniki i dalej mi to nie wychodzi.
Moze jakis pomysł ?

0

Prosze bardzo. Tutaj przyklad w PostgreSQL: http://www.postgresql.org/docs/9.1/static/plpgsql-trigger.html
Generalnie kluczowe jest RAISE EXCEPTION

0

Dalej nic..
Za cholere nie wiem, jak to ugryźć. Orłem nie jestem w tych sprawach. Czy taka konstrukcja jak:

CREATE TRIGGER mojtrigger AFTER INSERT OF Powierzchnia ON Budynki
FOR EACH ROW
BEGIN
IF New.Powierzchnia=0 THEN RAISE EXCEPTION 'powierzchniamusibyc>0'
END IF;
END;

Ma prawo zadziałać? czego mi tu brakuje i jakie błedy popełniam ?

0

Nie napisales jaka to baza danych, wiec uznalem, ze Postgres. Zapoznaj sie z tym: http://4programmers.net/Forum/Bazy_danych/100479-stosujcie_tagi_z_nazwa_systemu_bazy_danych_podczas_zakladania_nowego_watku?p=711569#id711569
Nastepnie zapoznaj sie z instrukcja formatowania tresci postow: Formatowanie treści postów na forum

A wreszcie: w Postgresie najpierw tworzymy funkcje, a dopiero pozniej podpiamy te funkcje jako trigger. Przyklad znajduje sie w linku jaki Ci podalem: http://www.postgresql.org/docs/9.1/static/plpgsql-trigger.html

Jezeli chodzi o MySQL, to tam nie wystepuje instrukcja RAISE EXCEPTION.

0

Nie lepiej zamiast triggera zwyczajny constraint?

0

Takie mamy wytyczne - musi być wyzwalacz.
Zapomniałem dodać, że baza danych jest w Postgresie.

Zrobiłem to w ten sposób. Funkcja wyzwalacza się utworzyła, jednak stricte triggera dalej nie mogę zrobić.

CREATE OR REPLACE FUNCTION mojtrigger()
  RETURNS trigger AS
$BODY$
BEGIN
IF New.Powierzchnia IS NULL THEN RAISE EXCEPTION 'powierzchnia_nie_moze_byc_nullem';
END IF; 
END;
$BODY$
  LANGUAGE plpgsql 

Po tym wpisuje to (tabela Budynek istnieje oraz kolumna powierzchnia takze)

 CREATE TRIGGER mojtrigger BEFORE INSERT OR UPDATE ON Budynek
FOR EACH ROW EXECUTE PROCEDURE mojtrigger();

I tutaj wyskakuje błąd mówiący o tym, że Relacja Budynek nie istnieje. Nie będę przesyłał screena, żeby udowodnić, że istnieje, bo jak byk widać, że jest.

0

Spróbuj może:

CREATE TRIGGER mojtrigger BEFORE INSERT OR UPDATE ON "Budynek"
FOR EACH ROW EXECUTE PROCEDURE mojtrigger();

albo

CREATE TRIGGER mojtrigger BEFORE INSERT OR UPDATE ON budynek
FOR EACH ROW EXECUTE PROCEDURE mojtrigger();

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