Wpis z mikrobloga

elo elo 3 2 0 SQLowe świry!
Mam do wykonania do mojej smutnej bazy trzy triggery na zajęcia. No i jeden mi nie działa. Nie wiem gdzie robię błąd.

Struktura tabeli:

`CREATE TABLE brama (
numer INTEGER NOT NULL,
rysunek CHAR(3 CHAR) NOT NULL,
czasookres CHAR(3 CHAR) NOT NULL,
obiektidobj INTEGER NOT NULL,
przedmiotyprzeglAduidprz INTEGER NOT NULL,
typ
idtyp INTEGER NOT NULL,
centrala
idcentrala INTEGER NOT NULL
);'

PRzykładowe inserty:
'INSERT INTO BRAMA VALUES(166495, 'TAK', '12M', 7, 7, 3, 3);
INSERT INTO BRAMA VALUES(156549, 'TAK', '12M', 1, 1, 4, 4);
INSERT INTO BRAMA VALUES(214646, 'TAK', '6M', 1, 1, 5, 5);
INSERT INTO BRAMA VALUES(214645, 'TAK', '6M', 1, 1, 6, 6);
INSERT INTO BRAMA VALUES(214644, 'TAK', '6M', 1, 1, 7, 7);'

Jak brama ma numer mniejszy niż 190000, to czasookres musi wynosić 12M.
Więc sobie zrobiłem triggera, który ma to sprawdzać. jak wrzucę nowego inserta np:
'INSERT INTO BRAMA VALUES(132121, 'TAK', '6M', 5, 5, 8, 8);'

to chcę, żeby zmienił czasookres na 12M

Triggera sporządziłem tak:

'CREATE OR REPLACE TRIGGER CZASOOKRES
TRG AFTER
INSERT OR UPDATE ON BRAMA
FOR EACH ROW
WHEN ( (NEW.NUMER < 190000 AND NEW.CZASOOKRES = '6M' ) OR (OLD.NUMER < 190000 AND OLD.CZASOOKRES = '6M' ))
BEGIN
INSERT INTO BRAMA (CZASOOKRES) VALUES ('12M');
END;
/'

No i nie bangla. Wywala mi błąd z obrazka.

Ktoś wie o co cho? :/ #sql #sqlserver #bazydanych
Pobierz gdziemojimbuspiatka - elo elo 3 2 0 SQLowe świry!
Mam do wykonania do mojej smutnej ...
źródło: comment_1639601093Y5XoAoV4PUyH9Qj0YQ4ixw.jpg
  • 5
@ando83: dałem dupy zasadniczo na początku. Wystarczyło zmienić z after na before i trigger działa. :)
'CREATE OR REPLACE TRIGGER CZASOOKRES_TRG BEFORE
INSERT OR UPDATE ON BRAMA
FOR EACH ROW
WHEN ( (NEW.NUMER < 190000 AND NEW.CZASOOKRES = '6M' ) OR (OLD.NUMER < 190000 AND OLD.CZASOOKRES = '6M' ))
BEGIN
:NEW.CZASOOKRES := '12M';
END;
/'