具有可變輸入參數的函數
在 PostgreSQL 中,可以定義儲存程序和函數來處理可變輸入參數。這使得在執行資料庫操作時具有更大的靈活性。
處理可變輸入參數的一種方法是為每個目的建立一個單獨的函數。但是,這可能會導致函數激增,特別是對於具有許多列的表。
另一種方法是定義一個函數,該函數使用模式參數來決定要使用的特定輸入參數。這種方法更有效率,並且不需要多個函數。
範例
考慮使用下列函數來使用使用者定義的網站資訊更新網站表:
CREATE OR REPLACE FUNCTION update_site( mode integer, name character varying, city character varying, telephone integer, ) RETURNS integer AS $$ BEGIN IF mode = 0 THEN BEGIN UPDATE "Sites" SET ("City","Telephone") = (city,telephone) WHERE "SiteName" = name; RETURN 1; EXCEPTION WHEN others THEN RAISE NOTICE 'Error on site update: %, %',SQLERRM,SQLSTATE; RETURN 0; END; ELSIF mode = 1 THEN BEGIN UPDATE "Sites" SET "City" = city WHERE "SiteName" = name; RETURN 1; EXCEPTION WHEN others THEN RAISE NOTICE 'Error on site update: %, %',SQLERRM,SQLSTATE; RETURN 0; END; ELSIF mode = 2 THEN BEGIN UPDATE "Sites" SET "Telephone" = telephone WHERE "SiteName" = name; RETURN 1; EXCEPTION WHEN others THEN RAISE NOTICE 'Error on site update: %, %',SQLERRM,SQLSTATE; RETURN 0; END; ELSE RAISE NOTICE 'Error on site update: %, %',SQLERRM,SQLSTATE; RETURN 0; END IF; END; $$ LANGUAGE plpgsql;
此函數可以處理三種模式:
透過使用模式參數,所需的更新可以透過單一函數呼叫執行,無需多個函數。
的預設值參數
另一個處理可變輸入參數的選項是使用預設值。這允許使用可選參數,而不需要模式參數。例如,以下函數僅在提供時更新城市:
CREATE OR REPLACE FUNCTION update_site( name character varying, city character varying DEFAULT NULL, telephone integer DEFAULT NULL, ) RETURNS integer AS $$ BEGIN UPDATE "Sites" SET ("City", "Telephone") = (city, telephone) WHERE "SiteName" = name; RETURN 1; EXCEPTION WHEN others THEN RAISE NOTICE 'Error on site update: %, %',SQLERRM,SQLSTATE; RETURN 0; END; $$ LANGUAGE plpgsql;
處理可變輸入參數的最佳方法取決於應用程式的特定要求。如果輸入參數變化很大,則可能需要使用模式參數或多個函數。不過,如果輸入參數一致,使用預設值可以提供更簡單、更有效率的解決方案。
以上是如何有效率地處理PostgreSQL函數中的可變輸入參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!