sql
  • postgresql
  • 2016-11-22 112 views 0 likes 
    0

    我創造了這個觸發:記錄「老」未分配尚未

    CREATE TRIGGER trig_update 
    AFTER INSERT 
    ON "delivery" FOR EACH ROW 
    EXECUTE PROCEDURE premium1(); 
    

    有了這個功能:

    CREATE OR REPLACE FUNCTION premium1() 
    RETURNS trigger AS $$ 
    BEGIN 
    IF (TG_OP='INSERT') THEN 
    IF(select sum(amount) from delivery where cli_num=OLD.cli_num group by cli_num) > 500.00 THEN 
        UPDATE client SET Type ='Gold' WHERE cli_num=OLD.cli_num; 
    END IF; 
    END IF; 
    RETURN NULL; 
    END; 
    $$LANGUAGE plpgsql; 
    

    當插入表送我提示以下錯誤:一個新的價值:

    ERROR: record "old" is not assigned yet Stan SQL:55000

    對此有何幫助?

    回答

    1
    CREATE OR REPLACE FUNCTION premium1() 
    RETURNS trigger AS $$ 
    BEGIN 
    IF (TG_OP='INSERT') THEN 
    IF(select sum(amount) from delivery where cli_num=NEW.cli_num group by cli_num) > 500.00 THEN 
        UPDATE client SET Type ='Gold' WHERE cli_num=NEW.cli_num; 
    END IF; 
    END IF; 
    RETURN NULL; 
    END; 
    $$LANGUAGE plpgsql; 
    
    +0

    非常感謝,現在的工作! – Cvg

    2

    AFTER觸發器OLD不可訪問/可見,因爲該記錄還沒有在數據庫中,所以沒有什麼可以比較它。您必須將其更改爲NEW

    fine manual:

    For a row-level trigger, the input data also includes the NEW row for INSERT and UPDATE triggers, and/or the OLD row for UPDATE and DELETE triggers.

    +0

    感謝您的答覆,卡米爾 – Cvg

    相關問題