2017-07-27 86 views
0

我創建了觸發器和函數。錯誤觸發器。觸發無返回。 PostgreSQL

CREATE TRIGGER trigger_update_quantity AFTER INSERT ON orderitem 
    FOR EACH ROW EXECUTE PROCEDURE update_quantity(); 

     CREATE OR REPLACE FUNCTION update_quantity() RETURNS TRIGGER AS $quantity_update$ 
      DECLARE 
      flower INT; 
      BEGIN 
      flower = New.flower_num; 
      UPDATE product SET quantity = quantity - New.quantity 
      WHERE flower_num = flower; 
      END; 
      $quantity_update$ 
     LANGUAGE plpgsql; 

當我嘗試向表中插入一行時。我有以下錯誤。

INSERT INTO "public"."orderitem" ("order_num", "flower_num", "quantity", "total_price") VALUES (?, ?, ?, ?); 

      [2F005] ERROR: control reached end of trigger procedure without RETURN 
      Where: PL/pgSQL function update_quantity() 
+0

我可能會誤解,但我認爲觸發器函數應該返回他爲他的動作使用的值(這裏是INSERT)。所以在你的例子中,我會返回NEW值。 – Arkhena

+0

我無法返回NEW。 給出一個返回的例子 – ImZ

+0

你會在[documentation](https://www.postgresql.org/docs/9.6/static/plpgsql-trigger.html) – Arkhena

回答

2

這是我會寫什麼(未測試):

CREATE OR REPLACE FUNCTION update_quantity() RETURNS TRIGGER AS $quantity_update$ 
     DECLARE 
     flower INT; 
     BEGIN 
     flower = New.flower_num; 
     UPDATE product SET quantity = quantity - New.quantity 
     WHERE flower_num = flower; 
     RETURN NEW; 
     END; 
     $quantity_update$ 
    LANGUAGE plpgsql; 

CREATE TRIGGER trigger_update_quantity AFTER INSERT ON orderitem 
    FOR EACH ROW EXECUTE PROCEDURE update_quantity(); 
+0

中找到一個例子。它正在工作。非常感謝) – ImZ

0

如何AFTER觸發器,可以返回RETURN OLD;或RETURN NULL;