Rumah >pangkalan data >tutorial mysql >Ralat PostgreSQL 42601: Bagaimana untuk Menentukan Jenis Pemulangan dengan Betul untuk Fungsi Mengembalikan Rekod?
Ralat ini berlaku apabila mencipta fungsi yang mengembalikan rekod tanpa memberikan senarai definisi lajur. Artikel ini akan menerangkan isu dan menyediakan penyelesaian untuk menyelesaikan ralat.
Dalam PostgreSQL, fungsi yang mengembalikan rekod memerlukan senarai definisi lajur yang menyatakan secara eksplisit nama dan jenis data lajur dalam rekod yang dikembalikan. Walau bagaimanapun, kod yang diberikan dalam soalan cuba mengembalikan rekod tanpa menentukan lajur, mengakibatkan ralat "senarai definisi lajur diperlukan."
Untuk menyelesaikan ralat, anda perlu untuk menyediakan senarai definisi lajur untuk jenis pulangan fungsi. Ini boleh dilakukan menggunakan kata kunci RETURNS. Sebagai contoh, berikut ialah versi fungsi yang diperbetulkan:
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;
Dalam kod ini, pernyataan RETURNS TABLE menentukan nama lajur dan jenis data rekod yang akan dikembalikan oleh fungsi tersebut.
Sebagai alternatif, anda boleh mengelak daripada menggunakan senarai definisi lajur dengan mengembalikan keseluruhan baris atau baris jadual sedia ada. Contohnya:
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;
Dalam kes ini, pernyataan pengguna RETURNS SETOF menunjukkan bahawa fungsi akan mengembalikan set baris jadual pengguna, yang sudah mempunyai takrifan lajur yang diperlukan.
Pastikan takrifan lajur sepadan dengan struktur jadual sebenar untuk mengelakkan ralat atau tingkah laku yang tidak dijangka.
Atas ialah kandungan terperinci Ralat PostgreSQL 42601: Bagaimana untuk Menentukan Jenis Pemulangan dengan Betul untuk Fungsi Mengembalikan Rekod?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!