Q1
"Tes kecil" Anda bisa berupa SQL biasa:
BEGIN;
SELECT get_function_that_returns_cursor('ret', 4100, 'foo', 123); -- note: 'ret'
FETCH ALL IN ret; -- works for any rowtype
COMMIT; -- or ROLLBACK;
Jalankan COMMIT
/ ROLLBACK
setelah Anda memeriksa hasilnya. Kebanyakan klien hanya menampilkan hasil dari perintah lat.
Selengkapnya di bab Mengembalikan Kursor dari manual.
Q2
Dan jika kita tidak mengetahui jenis baris yang dikembalikan, bagaimana kita bisa melakukannya?
Karena Anda hanya ingin memeriksa hasilnya, Anda dapat melemparkan seluruh catatan ke text
.Dengan cara ini Anda menghindari masalah dengan tipe pengembalian dinamis untuk fungsi secara bersamaan.
Pertimbangkan demo ini:
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