sql - 在 postgresql 中出现错误 "record type has not been registered"。怎么了?

标签 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();

在 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

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

最佳答案

rec 是一个未类型化的记录,因此将 SELECT (rec).* 替换为 VALUES (rec.CustomerID, rec.S)

关于sql - 在 postgresql 中出现错误 "record type has not been registered"。怎么了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37815054/

相关文章:

日期列的 SQL 计数

mysql - 使用 CSV 文件中的数据更新 SQL 数据库中的字段

sql - 窗口函数 : PARTITION BY one column after ORDER BY another

json - 在 postgres 中使用文本和 json

mysql - 将 postgresql 查询转换为适用于 mysql 的查询

sql - 如何按定义的计数对点进行分组并为每组返回一个边界框?

sql - 尝试根据另一个表获取结果 - WHERE 中不允许使用聚合函数

sql - 如何在 PostgreSQL 中为 '-' 用户授予权限

sql - 无法理解此 SQL 代码

postgresql - Postgres : inserting dynamic number of columns and values in table