PostgreSQL의 함수 (프로 시저)는 복수의 레코드를 구현 반환

PostgreSQL의 함수 (프로 시저)는 복수의 레코드를 구현 반환

배경 : 기능 페이지의 서비스의 사용은 여러 레코드가 렌더링을 형성 반환

방법 : 주기적으로

CREATE 
OR REPLACE FUNCTION "public"."f_get_traindata" ( OUT "o_item" VARCHAR, OUT "o_periodsnum" VARCHAR, OUT "o_trainday" VARCHAR, OUT "o_attendpersonnum" VARCHAR ) RETURNS SETOF "pg_catalog"."record" AS $BODY$ DECLARE
 rec record; -- 定义返回记录行
 o_sql TEXT; -- 定义执行的sql片段
BEGIN
  o_sql := 'SELECT item,periodsnum,trainday,attendpersonnum FROM bi_fact_traindata;';
-- 输出字段
FOR rec IN EXECUTE o_sql
loop
-- 将每个字段一一赋值给变量
 o_item := rec.item;
 o_periodsnum := rec.periodsnum;
 o_trainday := rec.trainday;
 o_attendpersonnum := rec.attendpersonnum;
RETURN NEXT;

END loop;
RETURN;
END;
$BODY$ LANGUAGE plpgsql VOLATILE COST 100 ROWS 1000

이런 식으로 너무 많은 문제가, 당신은 사용자 정의 필드, 더 복잡 필요합니다.


두 번째 방법 : 테이블을 사용하여

사용 테이블

CREATE OR REPLACE FUNCTION "public"."f_get_appraisalindex" ( "o_indexid" VARCHAR ) 
-- 定义table
RETURNS TABLE (
		"o_indexname" VARCHAR,
		"o_standardrule" VARCHAR,
		"o_standardscore" VARCHAR,
		"o_losescore" NUMERIC,
		"o_orgstructname" VARCHAR,
		"o_appraisaldate" VARCHAR,
		"o_periodictime" VARCHAR,
		"o_periodictimelosescore" NUMERIC,
		"o_evaluatereason" VARCHAR 
		) AS $BODY$ 
BEGIN
		RETURN query 
-- 字段一一映射
SELECT
		tn_indexname,
		tn_standardrule,
		tn_standardscore,
		tn_losescore,
		tn_orgstructname,
		tn_appraisaldate,
		tn_periodictime,
		tn_periodictimelosescore,
		tn_evaluatereason 
	FROM
		tn_appraisalindex 
	WHERE
		tn_periodictimelosescore > 0 
	ORDER BY
		tn_indexid;
	
END;

$BODY$ LANGUAGE plpgsql VOLATILE COST 100 ROWS 1000


전파

어떻게 상원 의원과 상원이 상황을 정의하려면 다음을 명확하게 할 필요가 없습니다 반환 방법이

그림 삽입 설명 여기(출처 : HTTPS : //blog.csdn.net/qq_42535651/article/details/92089510)

게시 된 274 개 원래 기사 · 원 찬양 119 · 전망 290 000 +

추천

출처blog.csdn.net/qq_31156277/article/details/104211384