我創建這些表:SQL插入服務器表到PostgreSQL
CREATE TABLE public.articulos
(id integer PRIMARY KEY,
nombre varchar(100),
stock decimal(18,2));
CREATE TABLE public.movimientos
(transaccion integer,
fecha date DEFAULT current_date,
articulo_id integer,
cantidad decimal(10,2),
tipo char(1) CHECK (tipo='E' OR tipo='S'),
FOREIGN KEY (articulo_id) REFERENCES public.articulos(id));
我試圖適應從代碼:
到PostgreSQL:
CREATE FUNCTION inserta() RETURNS trigger AS $actualiza$
BEGIN
-- Actualizamos la fecha
UPDATE public.articulos
SET stock=stock + T.parcial
FROM public.articulos A
INNER JOIN
(SELECT articulo_id,
SUM(CASE WHEN tipo='E'
THEN cantidad
ELSE -cantidad
END)
AS parcial FROM movimientos
GROUP BY articulo_id
)
T ON A.id=T.articulo_id;
RETURN NULL;
END;
$actualiza$ LANGUAGE plpgsql;
CREATE TRIGGER movimientosinsert
AFTER INSERT
ON public.movimientos
FOR EACH ROW
EXECUTE PROCEDURE inserta();
我還是不要't get是如何從SQL Server的這兩行:
AS parcial FROM INSERTED
SET stock=stock + T.parcial
所以,當我運行類似:
INSERT INTO public.movimientos (transaccion,articulo_id,fecha,cantidad,tipo)
VALUES (1,1,current_date,100,'E'),
(2,2,current_date,25,'S');
觸發調用函數和函數做的工作。
任何幫助,真的感謝,因爲我已經找到了解決方案,但我剛剛發現New
& Old
可能會有所幫助,如果指的是特定的列。 但是,如果我想引用特定表中的所有列,那該怎麼辦?
謝謝!
你不需要在Postgres中 - 至少在使用行級觸發器時(你這樣做,因爲你有'每行'')。只需使用觸發器中的'new'和'old'記錄即可:http://www.postgresql.org/docs/current/static/plpgsql-trigger.html – 2015-02-24 07:00:06
您可以幫我提供更多信息@a_horse_with_no_name嗎?我已經使用'new','old',但我不知道如何在Postgres中實現它們以引用表 – 2015-02-24 07:06:10
中的所有列就像任何列引用。 'new.column_name'。請閱讀說明書,其中包含很多示例。請記住,你總是處理完全**一排行觸發 – 2015-02-24 07:08:00