【发布时间】:2021-09-07 18:43:48
【问题描述】:
我有一个表,其中包含一个合同和诸如starting_date 和expiration_date 之类的列。我需要为特定类别(私人)创建一个触发器,一旦我们处于到期日期(也就是今天到期),将其更新一年。
我不太明白的是,如果我需要更新来触发触发器,我该如何更新日期。
如果我正确理解了 TRIGGERS,我需要执行一条更新语句来触发我的 TRIGGER 并让它完成它的工作。但如果这是正确的,那么我应该更新什么来触发它?
对于 TRIGGER 显然,如果我这样做 old.expiration_date == 当前日期,那么我会知道它是否会在今天到期。
例如,假设我们与:
开始日期:1998/02/01
expiration_date:2021/06/24
和当前日期:2021/06/24
所以现在我需要触发那个 TRIGGER 并更新这个日期,但是怎么做呢?
这是表格:
CREATE TABLE insurance_premiums (
contract_code text NOT NULL,
insurance_team text NOT NULL,
starting_date date NOT NULL,
expiration_date date NOT NULL,
contract_cost float8 NOT NULL,
vehicle_contract text NOT NULL,
customer_contract text NOT NULL,
driver_contract text NOT NULL,
CONSTRAINT insurance_premiums_pkey PRIMARY KEY (contract_code)
);
以下是上述示例日期的INSERT INTO 语句:
INSERT INTO insurance_premiums (contract_code, insurance_team, starting_date, expiration_date, contract_cost, vehicle_contract, customer_contract, driver_contract)
VALUES
('FX-30592', 'private', '1998-02-01', '2021-06-24', 3894.68, 'Cavalier', 'Nicoline Vaughn', 'Helen-elizabeth Galiero');
这也是TRIGGER:
CREATE TRIGGER update_contract
BEFORE UPDATE ON insurance_premiums
FOR EACH statement
EXECUTE procedure new_date();
还有用于触发器的空函数:
CREATE OR REPLACE FUNCTION public.new_date()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
END;
$function$
;
TRIGGER 再次需要自动更新日期,但我不明白我如何“调用”它以及它是如何工作的
【问题讨论】:
-
这不是触发作业。您需要一种作业调度程序来每天运行一次预期的更新。或者,创建一个可以即时修改相关日期的视图。
-
另外,您不应该将钱存储在浮点变量中。并且 insurance_team 似乎是外键的候选者。
-
好的,谢谢大家的回答!我是 SQL 的初学者,我还在学习。我应该如何存钱?我认为如果它的双精度浮点数会适合。另外我会用不同的东西来测试触发器,我现在正在学习触发器,所以我想用一些东西来测试它们。但这似乎不是触发工作。
标签: sql postgresql triggers