在 postgresql 中出现错误“记录类型尚未注册”。怎么了?

Kor*_*res 6 sql postgresql

CREATE OR REPLACE FUNCTION get_biggest_order()
RETURNS TABLE(CustomerID int,Sum float) AS
$$
DECLARE
    rec RECORD;
mycursor CURSOR FOR WITH TOTAL(TotalPerCustomer) AS (SELECT SUM(TotalDue) FROM SalesOrderHeader GROUP BY SalesOrderHeader.CustomerID),
    MAX(Max) AS (SELECT MAX(TotalPerCustomer) FROM TOTAL)
    SELECT SalesOrderHeader.CustomerID,SUM(TotalDue) AS S FROM SalesOrderHeader,MAX GROUP BY SalesOrderHeader.CustomerID,Max HAVING SUM(TotalDue)=Max;
    BEGIN
        CREATE TEMP TABLE Results2(CustomerID int,Sum float);
        -- Open the cursor
        OPEN mycursor;
        LOOP
            -- fetch row into the film
            FETCH mycursor INTO rec;
            -- exit when no more row to fetch
            EXIT WHEN NOT FOUND;
            -- build the output
            INSERT INTO Results2 SELECT (rec).*;
        END LOOP;
    -- Close the cursor
        CLOSE mycursor;
        RETURN QUERY EXECUTE 'SELECT * FROM Results2';
    END; $$
LANGUAGE plpgsql;

SELECT get_biggest_order();
Run Code Online (Sandbox Code Playgroud)

在 Postgres 中出现以下错误:

ERROR:  record type has not been registered
CONTEXT:  SQL statement "INSERT INTO Results2 SELECT (rec).*"
PL/pgSQL function get_biggest_order() line 17 at SQL statement
********** Error **********

ERROR: record type has not been registered
SQL state: 42809
Context: SQL statement "INSERT INTO Results2 SELECT (rec).*"
PL/pgSQL function get_biggest_order() line 17 at SQL statement
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用游标以表格格式返回游标内的查询。显然记录类型变量有问题,它无法将其插入到我想使用该函数返回的临时表中。怎么了?

Zig*_*ter 4

rec是无类型记录,因此替换SELECT (rec).*VALUES (rec.CustomerID, rec.S).