LINUX.ORG.RU

создание триггера на Update

 ,


1

0

Даны таблицы:

CREATE TABLE public.readership(
Idreader VARCHAR (255),
firstName VARCHAR ( 55 ) ,
lastName VARCHAR ( 55 ) ,
email VARCHAR ( 100 ) ,
address VARCHAR ( 100 ),
city VARCHAR ( 100 ) ,
state VARCHAR ( 100 ),
zipcode VARCHAR ( 100 ) ,
callNumber VARCHAR (100 ) ,
PRIMARY KEY (Idreader)
);


CREATE TABLE public.collection(
ItemBarcode VARCHAR (255),
title VARCHAR ( 255 ) ,
author VARCHAR ( 255 ) ,
ISBN VARCHAR ( 255 ) ,
publicationYear VARCHAR ( 255 ) ,
publisher VARCHAR ( 255 ) ,
itemCollection VARCHAR ( 255 ) ,
checkinDate VARCHAR (255),
PRIMARY KEY (ItemBarcode)
);

CREATE TABLE public.fund (
bibNum VARCHAR (255),
itemCount VARCHAR (255),
floatingItem BOOLEAN,
ItemBarcode VARCHAR (255),
PRIMARY KEY (bibNum),
FOREIGN KEY(ItemBarcode) REFERENCES collection(ItemBarcode)
);

CREATE TABLE public.orders(
IdOrders VARCHAR (255) ,
checkoutDateTime VARCHAR (255) ,
itemBarcode VARCHAR (255),
bibNum VARCHAR (255),
idReader VARCHAR (255),
PRIMARY KEY (IdOrders),
FOREIGN KEY(idReader) REFERENCES readership(idReader),
FOREIGN KEY(bibNum) REFERENCES fund(bibNum)

Я пытаюсь создать функцию и триггер, который будет обновлять атрибут timeorder с текущей датой, когда атрибут floatingItem обновляется. Функция, с которой я работаю, работает с одной проблемой. Он обновляет все записи, а не те, которые были обновлены. Проблема: при обновлении данных в floatingItem timeorder остается неизменным

ALTER TABLE public.orders ADD COLUMN timeorder timestamp without time zone;

CREATE FUNCTION web() RETURNS trigger AS
$$ 
BEGIN IF new.floatingItem = FALSE 
THEN 
UPDATE public.orders SET timeorder = current_timestamp WHERE
new.bubNum=orders.bibNum;
END IF; 
RETURN new;
END;
$$
LANGUAGE plpgsql VOLATILE; 

CREATE TRIGGER IF NOT EXISTS mytrigger AFTER UPDATE ON public.fund FOR EACH ROW EXECUTE PROCEDURE mytrigger ();

А как бы это сделали вы?



Последнее исправление: moserp (всего исправлений: 3)

`CREATE … mytrigger AFTER UPDATE … EXECUTE PROCEDURE mytrigger ();

Он у тебя сам себя чтоли должен вызывать?

И почему в тегах MySQL? Там совсем другие триггеры.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Исправлено:

CREATE TRIGGER web1 AFTER UPDATE ON public.fund FOR EACH ROW EXECUTE PROCEDURE web (); 

Случайный тег.

moserp
() автор топика

Попробуй так:

CREATE TRIGGER web1 FTER UPDATE OF floatingItem ON public.fund FOR EACH ROW EXECUTE FUNCTION web();

И RETURN NULL;, ибо AFTER.

Но, если что, то я сюда по тегу MySQL зашел, в постгес я не секу.

WitcherGeralt ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.