Rumah >pangkalan data >tutorial mysql >Ralat PostgreSQL 42601: Bagaimana untuk Menentukan Jenis Pemulangan dengan Betul untuk Fungsi Mengembalikan Rekod?

Ralat PostgreSQL 42601: Bagaimana untuk Menentukan Jenis Pemulangan dengan Betul untuk Fungsi Mengembalikan Rekod?

Barbara Streisand
Barbara Streisandasal
2025-01-05 13:51:40791semak imbas

PostgreSQL Error 42601: How to Correctly Define Return Types for Functions Returning Records?

PostgreSQL: ERROR: 42601: senarai definisi lajur diperlukan 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.

Isu

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."

Penyelesaian

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn