访问触发器

时间:2016-04-25 05:00:17

标签: postgresql stored-procedures triggers

到目前为止,这是我的代码:

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不是您访问当前行值的方式。我一直在阅读文档,但仍然找不到答案。如果有人对如何解决这个问题有任何意见,我会很乐意帮助您。

这是我目前的表格:

enter image description here

我的插入是这样的:

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。

0 个答案:

没有答案