Q1
您的“小测试”可以是普通的SQL:
BEGIN;SELECt get_function_that_returns_cursor('ret', 4100, 'foo', 123); -- note: 'ret'FETCH ALL IN ret; -- works for any rowtypeCOMMIT; -- or ROLLBACK;检查结果 后 执行
COMMIT/ 。大多数客户端仅显示lat命令的结果。
ROLLBACK__
本手册的“ 返回光标 ”一章中有更多内容。
第2季
如果我们不知道要返回的行类型,我们该怎么做?
由于您只想检查结果,因此可以 将整个记录投射到text
。这样,您就可以完全避免该函数的动态返回类型的问题。
考虑这个演示:
CREATE TABLE a (a_id int PRIMARY KEY, a text);INSERT INTO a VALUES (1, 'foo'), (2, 'bar');CREATE OR REPLACE FUNCTION reffunc(INOUT ret refcursor) AS -- INOUT param :)$func$BEGIN OPEN ret FOR SELECT * FROM a;END$func$ LANGUAGE plpgsql;CREATE OR REPLACE FUNCTION ctest() RETURNS SETOF text AS$func$DECLARE curs1 refcursor; rec record;BEGIN curs1 := reffunc('ret'); -- simple assignment LOOP FETCH curs1 INTO rec; EXIT WHEN NOT FOUND; -- note the placement! RETURN NEXT rec::text; END LOOP;END$func$ LANGUAGE plpgsql;- > SQLfiddle的



