Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Membetulkan Ralat PostgreSQL 42601: 'senarai definisi lajur diperlukan untuk fungsi mengembalikan 'rekod''?
Ralat "a lajur senarai definisi diperlukan untuk fungsi mengembalikan "rekod"" menunjukkan bahawa fungsi yang ditakrifkan untuk mengembalikan jenis data rekod tiada nama lajur dan jenis data dalam pernyataan pulangannya. Untuk menyelesaikan ralat ini, nyatakan takrifan lajur dalam klausa RETURNING atau gunakan RETURNS SETOF
Seperti yang ditunjukkan dalam kod berikut, anda boleh mentakrifkan nama lajur dan jenis data dalam klausa RETURNING:
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$;
Sebagai alternatif, anda boleh menggunakan RETURNS SETOF
CREATE OR REPLACE FUNCTION get_user_by_username3(_username text , _online bool DEFAULT false) RETURNS TABLE ( users_row users , custom_addition text ) 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 -- whole row , u.user_name || u.user_id; ELSE RETURN QUERY SELECT u, u.user_name || u.user_id FROM users u WHERE u.user_name = _username; END IF; END $func$;
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat PostgreSQL 42601: 'senarai definisi lajur diperlukan untuk fungsi mengembalikan 'rekod''?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!