プロジェクトの関数グループの実行を自動化するために作成した関数があります。私は必要なデータを格納しているrefcursorを使用しています。これは、呼び出される各関数に引数として渡し、引数に基づいて実行されます。私はここに私のコードを与えています:
CREATE OR REPLACE FUNCTION ccdb.fn_automation()
RETURNS void AS
$BODY$
DECLARE
sec_col refcursor;
cnt integer;
sec_code ccdb.update_qtable%ROWTYPE;
new_cnt numeric;
BEGIN
SELECT COUNT(*) INTO cnt FROM ccdb.update_qtable WHERE status_flag IN (-1,1);
OPEN sec_col FOR SELECT DISTINCT section_code FROM ccdb.update_qtable WHERE status_flag IN (-1,1);
FOR i IN 1..cnt
LOOP
FETCH sec_col INTO sec_code;
SELECT ccdb.o_dtr_update(sec_code.section_code);
SELECT ccdb.o_consumer_update_for_update(sec_code.section_code);
SELECT ccdb.o_bills_update_for_update(sec_code.section_code);
SELECT ccdb.o_payments_update_for_update_new(sec_code.section_code);
SELECT ccdb.o_payments_map_update_for_update(sec_code.section_code);
SELECT COUNT(*) INTO new_cnt FROM ccdb.update_qtable WHERE status_flag IN (-1,1);
IF new_cnt > cnt
THEN
CLOSE sec_col;
OPEN sec_col FOR SELECT DISTINCT section_code FROM ccdb.update_qtable WHERE status_flag IN (-1,1);
cnt := new_cnt;
END IF;
END LOOP;
CLOSE sec_col;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ここで私が直面している問題は、この関数を実行しようとするたびに、次のエラーが表示されることです。
ERROR: query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT: PL/pgSQL function ccdb.fn_automation() line 20 at SQL statement
この関数で PERFORM を使用する場所がわかりません。コンテキストは、エラーが 20 行目、つまり、カーソルを開くときに使用している SELECT ステートメントにあることを示しています。したがって、どうすればこの問題を解決できるかわかりません。