簡體   English   中英

如何在 PostgreSQL 中插入觸發器?

[英]How to insert trigger in PostgreSQL?

我有兩個表:

  1. users
  2. trainer

users表中,我is_trainer=false有一列is_trainer=false false`。

當用戶在表users輸入信息並選擇列is_trainer=true我想在trainer is_trainer=true中插入用戶信息。

當我省略 if 條件時,當我在users表中插入一個用戶后,它會將信息放入trainer表中,但是當我放入 if 條件時,它無法工作! 我認為它認為is_trainer是針對trainer is_trainer而不是針對users

我的代碼:

BEGIN
    IF NEW.is_trainer <> OLD.is_trainer THEN
        INSERT INTO trainer(trainer_id, sport_id, fee_per_hour, experience, created_by)
        VALUES(users.user_id, 3, '200$', 3, 6);
    END IF;
    RETURN NEW;
END;

這不會像您期望的那樣工作:

IF NEW.is_trainer <> OLD.is_trainer THEN

INSERT觸發器中,沒有OLD值,即偽表OLD中的所有列都是NULL 所以你的表達歸結為:

IF NEW.is_trainter <> NULL THEN

這個條件永遠不會是真的,因為沒有什么不同NULL ,也不等於NULL (檢查空性,你需要IS NULL )。

根據您對需求的描述,我認為您想要:

IF NEW.is_traiter = true THEN

此外,您的INSERT命令將不起作用,因為它引用了未知關系users 你可能想要:

INSERT INTO trainer(trainer_id,sport_id,fee_per_hour,experience,created_by)
VALUES(NEW.user_id, 3, '200$', 3, 6);

很可能,您為 insert into trainer提供的其他值也應該來自偽表NEW (例如created_by )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM