PostgreSQL executes dynamic SQL and returns multiple result sets

PostgreSQL executes dynamic SQL and returns multiple result sets

PostgreSQL executes dynamic SQL and returns multiple result sets

Don't talk nonsense, go directly to the code

Create storage

CREATE OR REPLACE FUNCTION test(ref1 refcursor, ref2 refcursor,aa varchar)

RETURNS SETOF refcursor AS $BODY$
DECLARE
sqlString varchar(4000) ='';
--Query sql countSqlString varchar(4000) =''; --Statistics sql

BEGIN

– IF(aa='*') THEN
– Begin
– SqlString :=''; – Splicing condition
– End;
– ELSE
– Begin
– SqlString :='';
– End;
– END IF;

– IF ends_with IS NOT NULL THEN
– sql := sql || ‘’; --拼接sql
– END IF;

SqlString := ‘SELECT * FROM act_ge_property WHERE value_=’’’||aa||’’’ limit 10 OFFSET 0’;

countSqlString := ‘SELECT COUNT(1) FROM act_ge_property WHERE value_=’’’||aa||’’’ limit 10 OFFSET 0’;
– EXECUTE(SqlString);
– EXECUTE(countSqlString);
– RETURN QUERY EXECUTE SqlString;
– 打印SQL
– raise notice ‘sql=>%’,SqlString;

open $1 FOR EXECUTE(SqlString);
RETURN NEXT $1;

open $2 FOR EXECUTE(countSqlString);
RETURN NEXT $2;

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

Execute query

BEGIN;
SELECT test(‘a’,‘b’,‘1’);
FETCH ALL in “a”;
FETCH ALL in “b”;
COMMIT;
Result display

Guess you like

Origin blog.csdn.net/qq_16171233/article/details/109638796