簡體   English   中英

sql 觸發函數 - 錯誤“返回超過一行”

[英]sql trigger functions - Error “returned more than one row”

我使用 pgadmin 創建了一個 postgresql 數據庫。
我需要一個處理新購買的觸發器/函數:

purchases_ait通過添加到purchases觸發; 在將采購添加到purchases表之前檢查庫存,如果不足則引發異常; 如果沒有例外,則從inventory中減去已售數量並將其添加到purchases中。


Purchases.ait拋出錯誤消息: more than one row is returned 請告訴我為什么會發生這種情況。 我認為這可能與邏輯順序有關,例如 if/then 和/或 begin/end 語句。 但我一直無法弄清楚。 非常感謝幫助!

Purchases_ait:(原創create function碼,觸發碼)

CREATE FUNCTION purchases_ait() 
   RETURNS TRIGGER 
   LANGUAGE PLPGSQL
AS
$$
BEGIN
    IF NEW.quantity > quantity 
    FROM public.inventory THEN 
    RAISE EXCEPTION 'We do not have that much of that item left.';
    END IF;
  UPDATE public.inventory
     SET quantity = quantity - NEW.quantity
   WHERE item_id = NEW.item_id;
   RETURN NEW;
END;
$$
--trigger code --
CREATE TRIGGER purchases_ait 
   AFTER INSERT
   ON public.purchases
   FOR EACH ROW
       EXECUTE PROCEDURE purchases_ait()

我讓它工作了。 這兩個問題是:

  • 將其更改為BEFORE而不是AFTER function
  • 將其更改為FOR EACH STATEMENT而不是FOR EACH ROW應用程序

暫無
暫無

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

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