到目前为止,这是我的代码:
CREATE OR REPLACE FUNCTION updateDegreeStatus()
RETURNS TRIGGER as $updateDegreeStatus$
BEGIN
IF(new.degreeName = old.degreeName and old.endDate = NULL)
THEN
UPDATE degree
SET old.endDate = CURRENT_DATE
WHERE degree.degreeID = old.degreeID;
END IF;
RETURN NEW;
END;
$updateDegreeStatus$ LANGUAGE plpgsql;
CREATE TRIGGER updateDegreeStatus
BEFORE INSERT ON degree
FOR EACH ROW
EXECUTE PROCEDURE updateDegreeStatus();
我遇到的问题是访问触发器当前所在行的当前值。我的存储过程应该如何工作,如果新插入与当前行具有相同的度数名称,并且结束日期的当前行值为null,则执行此操作。但关键字old不是您访问当前行值的方式。我一直在阅读文档,但仍然找不到答案。如果有人对如何解决这个问题有任何意见,我会很乐意帮助您。
这是我目前的表格:
我的插入是这样的:
INSERT INTO degree(degreeID, degreeName, type, startDate, endDate)
VALUES(3, 'Computer Science with a Concentration in Software Development', 'Concentration', CURRENT_DATE, null)
现在我想要发生的是当发出insert命令时它将触发我的触发器,并将检查New degreeName是否等于当前行的degreeName以及当前行endDate是否为null。如果是,那么它将在当前行发出Update,它只是将endDate设置为CURRENT_Date。