2
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の中で次のエラーを取得する:私は、カーソルを使用して表形式でカーソル内のクエリを返すようにしようとしていますpostgresqlに「レコードタイプが登録されていません」というエラーが表示されます。なにが問題ですか?
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
。どうやら、何かがレコード型変数に間違っていて、それを関数を使って返すtempテーブルに挿入することはできません。なにが問題ですか?
select文だけを実行する関数と一時表を作成するのはなぜですか? –
それは割り当てで、私は同じ考えを持っていた、haha :) – Kores
私は最近、教師が何を考えているのだろう...笑 –