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/