【发布时间】:2021-04-18 21:13:40
【问题描述】:
我试图创建一个触发器来控制参数不是 NULL,但是当我尝试插入时:
INSERT INTO puntuacions(puntuacio, contingut, data) VALUES (6,NULL,CURRENT_DATE);
控制台启动一个大循环,试图使 INSERT inside 函数。我不确定我是否必须在函数或触发器结束时执行 INSERT。 BTW on avg select 我试图从 SELECT 中设置一个 AVG 值以插入表中。 我有这个代码:
功能:
create or replace function p_controla() returns trigger as $controla_puntuacions$
begin
IF new.puntuacio IS NULL OR new.contingut IS NULL OR new.data IS NULL
THEN
RAISE 'SIUSPLAU OMPLE TOTES LES DADES DE LA TAULA';
ELSE
INSERT INTO puntuacions(puntuacio, contingut, data) VALUES (new.puntuacio,new.contingut,new.data);
UPDATE continguts SET puntuacio = (SELECT AVG(puntuacio) FROM puntuacions WHERE contingut = new.contingut) WHERE idcontingut = new.contingut;
RAISE ' OK! ';
END IF;
END;
$controla_puntuacions$ language plpgsql;
触发:
create trigger controla_puntuacions
before insert on puntuacions
for each row execute procedure p_controla();
【问题讨论】:
-
这个触发器基本上实现了一个约束。为什么?
-
为什么不将这些列定义为
NOT NULL?
标签: sql postgresql