【问题标题】:Create a record automatically in another record when table gets a new record表获取新记录时自动在另一条记录中创建记录
【发布时间】:2021-12-23 22:36:58
【问题描述】:

我有两张桌子。当一条记录添加到service 表时,我想在付款记录中自动创建一条状态为false 的记录。我希望付款看起来像这样,例如,如果已添加服务

它应该像这样自动创建付款记录:

id: autoincrement, fk_service 1, price null, payment_date null, status false

在我的网络应用程序中,我将只更新值。

原始表格:

服务

id BIGSERIAL PK,
start_date date not null,
end_date date null,
status VARCHAR(20)

付款

id BIGSERIAL PK,
fk_service BIGSERIAL,
price DECIMAL,
payment_date date,
status BOOLEAN not null,
FOREIGN KEY(fk_service) references service(id)

有人可以建议,我怎样才能做到这一点?

我试着写一个触发器

CREATE FUNCTION insert_payment() RETURNS TRIGGER
AS $insert_payment$
BEGIN
    IF NEW service THEN
        insert into payment(fk_service, status) values (service.id, false) 
    END IF;
END;

我收到syntax error at or near create line 5 as $BODY$CREATE FUNCTION insert_payment() RETURNS TRIGGER^

【问题讨论】:

  • 看看triggers
  • 表格有,而不是记录。
  • @JimJones 你能告诉我我的触发器做错了什么吗?
  • "Create a record in a record" 对我来说毫无意义(忽略表有行而不是记录的事实)

标签: sql postgresql triggers


【解决方案1】:

您必须将函数“附加”到 at 触发器中,这将监听给定表上的事件,例如AFTER INSERT 触发器

功能

CREATE OR REPLACE FUNCTION insert_payment() RETURNS TRIGGER AS $$
BEGIN
  INSERT INTO payment(fk_service, status) values (NEW.id, false);
  RETURN NEW;
END;$$ LANGUAGE plpgsql;

在表上触发service

CREATE OR REPLACE TRIGGER on_insert_service AFTER INSERT ON service
FOR EACH ROW EXECUTE PROCEDURE insert_payment();

演示:db<>fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多