建立傳回記錄而不提供記錄的函數時會發生此錯誤列定義列表。本文將解釋該問題並提供解決該錯誤的解決方案。
在 PostgreSQL 中,傳回記錄的函數需要一個列定義列表,明確指定列的名稱和資料類型傳回的記錄中。但是,問題中提供的程式碼嘗試在不定義列的情況下傳回記錄,從而導致錯誤「需要列定義清單」。
要解決該錯誤,您需要為函數的傳回類型提供列定義清單。這可以使用 RETURNS 關鍵字來完成。例如,以下是函數的修正版本:
CREATE OR REPLACE FUNCTION get_user_by_username( username varchar(250), online boolean ) RETURNS TABLE ( user_id int, user_name varchar(250), last_activity timestamptz ) AS $$ BEGIN IF online THEN UPDATE users SET last_activity = current_timestamp WHERE user_name = username; END IF; RETURN QUERY SELECT user_id, user_name, last_activity FROM users WHERE user_name = username LIMIT 1; END; $$ LANGUAGE plpgsql;
在此程式碼中,RETURNS TABLE 陳述式指定函數要傳回的記錄的列名稱和資料類型。
或者,您可以透過傳回現有資料表的整行或多行來避免使用列定義清單。例如:
CREATE OR REPLACE FUNCTION get_user_by_username( username varchar(250), online boolean ) RETURNS SETOF users AS $$ BEGIN IF online THEN RETURN QUERY UPDATE users SET last_activity = current_timestamp WHERE user_name = username RETURNING *; ELSE RETURN QUERY SELECT * FROM users WHERE user_name = username; END IF; END; $$ LANGUAGE plpgsql;
在這種情況下,RETURNS SETOF users 語句指示函數將傳回 users 表的一組行,該表已經具有必要的列定義。
確保列定義與實際表結構匹配,以避免錯誤或意外行為。
以上是PostgreSQL 錯誤 42601:如何正確定義傳回記錄的函數的回傳類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!