錯誤「錯誤:42601:需要列定義清單傳回「record」的函數表示聲明返回記錄類型的函數在其傳回值中沒有指定列定義清單
CREATE OR REPLACE FUNCTION get_user_by_username(_username text , _online bool DEFAULT false) RETURNS TABLE ( user_id int , user_name varchar , last_activity timestamptz ) LANGUAGE plpgsql AS $func$ BEGIN IF _online THEN RETURN QUERY UPDATE users u SET last_activity = current_timestamp -- ts with time zone WHERE u.user_name = _username RETURNING u.user_id , u.user_name , u.last_activity; ELSE RETURN QUERY SELECT u.user_id , u.user_name , u.last_activity FROM users u WHERE u.user_name = _username; END IF; END $func$;
呼叫:
SELECT * FROM get_user_by_username('myuser', true);
傳回所有現有表格使用者的列,有一個更簡單的方法。 Postgres 會自動為每個表定義一個同名的複合類型。 >「神奇」在於函數呼叫中,我們(可選)分解行類型:
CREATE OR REPLACE FUNCTION get_user_by_username(_username text , _online bool DEFAULT false) RETURNS SETOF users LANGUAGE plpgsql AS $func$ BEGIN IF _online THEN RETURN QUERY UPDATE users u SET last_activity = current_timestamp WHERE u.user_name = _username RETURNING u.*; ELSE RETURN QUERY SELECT * FROM users u WHERE u.user_name = _username; END IF; END $func$;
以上是如何正確定義傳回記錄或複合類型的 PostgreSQL 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!