�䤤��碌���Τ���٤˼¹Ԥ���ΤǤϤʤ����������������ꤷ�ơ��䤤��碌�ץ��벽�����䤤��碌�η�̤���٤˿��ԤŤ��ɤߤȤ뤳�Ȥ��Ǥ��ޤ��������Ԥ���ͳ��1�Ĥϡ�������¿���ιԤ�������Υ���θϳ���ɤ����ȤǤ�(��������PL/pgSQL �桼�����̾盧����ۤ���ɬ�פϤ���ޤ���FOR �롼�פϼ�ưŪ�˥������������Ū�˻��Ѥ��ƥ����������ɤ�����Ǥ�)�� ��궽̣����������ˡ�Ȥ��ơ��ƤӽФ������Ԥ��ɤ�뤳�ȤΤǤ���褦�ˡ��������줿��������ؤλ��Ȥ��֤���ˡ������ޤ��� ����ˤ�ꡢ�ؿ��������̤ιԥ��åȤ��֤��ݤθ�Ψ�����夷�ޤ���
PL/pgSQL �ˤ��������ƤΥ�������ؤΥ��������ϡ����������ѿ����ͳ���ޤ��� ���������ѿ��ϡ�����ü�� refcursor �ǡ������Ǥ������������ѿ����������1�Ĥ���ˡ�ϡ�ñ�� refcursor �����ѿ��Ȥ���������뤳�ȤǤ���¾����ˡ�ϡ��������������ʸ����Ѥ��뤳�ȤǤ���
name CURSOR [ ( arguments ) ] FOR select_query ;
(����ϰ���Ū�ˤϰʲ��Τ褦�ʤ�ΤǤ�(Oracle �Ȥθߴ����Τ��ᡢFOR �� IS ���֤������뤳�Ȥ��Ǥ��ޤ�)�� arguments �Ϥ⤷����С�name �� datatype���Ȥ߹�碌��ޤǶ��ڤä��ꥹ�Ȥǡ�Ϳ����줿�䤤��碌��Υѥ����ͤȤ����ִ������̾����������ޤ�������̾���˼ºݤ�����������ͤϡ��������������������˻��ꤵ��ޤ���
�ʲ�������ޤ���
DECLARE curs1 refcursor; curs2 CURSOR FOR SELECT * from tenk1; curs3 CURSOR (key int) IS SELECT * from tenk1 where unique1 = key;
����� 3 �Ĥ��ѿ��Ϥ��٤� refcursor �ǡ�����������ޤ������ǽ�Τ�Τ����Ƥ��䤤��碌�˻��ѤǤ���2���ܤˤϴ������䤤��碌�������Х���ɤ����(��ӤĤ�����) ���ޤ����ޤ����Ǹ�Τ�Τˤϡ��ѥ����դ����䤤��碌���Х���ɤ���Ƥ��ޤ��� (key �ϥ������뤬���������������ѥ����ͤ��֤��������ޤ���)curs1 �ѿ��ϡ�������䤤��碌�˷�ӤĤ����Ƥ��ޤ���Τǡ�����Х�����Ǥ���ȸƤФ�ޤ���
�����������Ѥ��ƹԤ���Ф����ˡ��������ɬ�פ�����ޤ�(����� DECLARE CURSOR SQL���ޥ�ɤ�ư���Ʊ���Ǥ�)�� PL/pgSQL �ˤ� 4 ����� OPEN ʸ�����ꡢ������� 2 �Ĥϥ���Х���ɥ��������ѿ�����Ѥ����Ĥ�� 2 �ĤϥХ���ɥ��������ѿ�����Ѥ��ޤ���
OPEN unbound-cursor FOR SELECT ...;
���������ѿ��ϳ����졢�¹Ԥ���褦���ꤷ���䤤��碌����Ϳ����ޤ������˳�����������������ȤϤǤ������ޤ�������Х���ɥ�������Ȥ���(�Ĥޤꡢñ�ʤ� refcursor �ѿ��Ȥ���)�������Ƥ��ʤ���Фʤ�ޤ��� SELECT �䤤��碌�ϡ�¾�� PL/pgSQL �� SELECT ʸ��Ʊ�ͤ���ˡ�ǰ����ޤ��� PL/pgSQL ���ѿ�̾���֤�������졢�䤤��碌�ײ�Ϻ����ѤǤ���褦�˥���å��夵��ޤ���
OPEN curs1 FOR SELECT * FROM foo WHERE key = mykey;
OPEN unbound-cursor FOR EXECUTE query-string;
���������ѿ��ϳ����졢�¹Ԥ���褦���ꤷ���䤤��碌����Ϳ����ޤ������˳�����������������ȤϤǤ������ޤ�������Х���ɥ�������Ȥ���(�Ĥޤꡢñ�ʤ� refcursor �ѿ��Ȥ���)�������Ƥ��ʤ���Фʤ�ޤ��� �䤤��碌�ϡ�EXECUTE ���ޥ�ɤ�Ʊ����ˡ�ˤ��ʸ���Ȥ��ƻ��ꤵ��ޤ��� �̾��Ʊ�ͤˡ�����ˤ�ꡢ����˼¹Ԥ���ݤ˰�ä��䤤��碌�뤳�Ȥ��Ǥ���������������ޤ���
OPEN curs1 FOR EXECUTE ''SELECT * FROM '' || quote_ident($1);
OPEN bound-cursor [ ( argument_values ) ];
��������䤤��碌����ӤĤ����륫�������ѿ�������˻��Ѥ���� OPEN �η����Ǥ������˳�����������������ȤϤǤ��ޤ��°�����ɾ�����ϥ������뤬������Ȥ��Τ�������줿���ˤΤ߸���ޤ��� �������ͤϡ��䤤��碌������֤��������ޤ����Х���ɥ���������䤤��碌�ײ�Ͼ�˥���å����ǽ�Ȥߤʤ���ޤ��� ���ξ��������� EXECUTE �Ϥ���ޤ���
OPEN curs2; OPEN curs3(42);
����������Ƥ��顢��������������ʸ����Ѥ��ƥ�����������Ȥ��Ǥ��ޤ���
���������ϡ���������Ϥ��뤿��˳��������δؿ���ǹԤ�ɬ�פϤ���ޤ��� �ؿ����� refcursor �ͤ��֤����ƤӽФ����Ǥ��Υ�������������뤳�Ȥ�Ǥ��ޤ�(����Ū�ˤ�refcursor�ͤϡ���������ؤ�ͭ�����䤤��碌����ĥݡ�����(����)��̾����ñ�ʤ�ʸ����Ǥ�������̾���ϡ��ݡ������������Ȥʤ���¾��refcursor�����ѿ����������뤳�Ȥǡ�¾���Ϥ����Ȥ��Ǥ��ޤ�)��
���ƤΥݡ�����ϡ�����Ū�˥ȥ�������ν�����Ĥ�����ޤ������äơ�refcursor �ͤϤ��Υȥ�������ν���ޤǤδ֤Τ߳�������������ؤλ��ȤȤ���ͭ���Ǥ���
FETCH cursor INTO target;
FETCH �� SELECT INTO ��Ʊ�ͤˡ��������뤫�鼡�ιԤ���Ф����оݤ˳�Ǽ���ޤ����оݤȤϡ����ѿ����쥳�����ѿ����ޤ���ñ����ѿ���ޤǶ��ڤä��ꥹ�ȤǤ��� SELECT INTO �ξ���Ʊ�͡��ü�� FOUND �ѿ������뤳�Ȥǡ��Ԥ�����Ǥ������ɤ������ǧ���뤳�Ȥ��Ǥ��ޤ���
FETCH curs1 INTO rowvar; FETCH curs2 INTO foo,bar,baz;
CLOSE cursor;
CLOSE �ϥݡ�������ظ�Υ���������Ĥ��ޤ����������Ѥ��ƥȥ�������ν���������˥������������뤳�Ȥ��Ǥ����ޤ������������ѿ�������������ٳ������Ȥ��Ǥ��ޤ���
CLOSE curs1;
PL/pgSQL �ؿ��Ǥϡ��ƤӽФ����˥���������֤����Ȥ��Ǥ��ޤ��� ������ˡ�ϡ��ؿ�����ʣ���Ԥޤ���ʣ������֤����˻��Ѥ��ޤ��� �ؿ��ϡ�������������ƤӽФ����˥�������̾���֤��ޤ��� ����ˤ�ꡢ�ƤӽФ����ϡ��������뤫��Ԥ� FETCH �Ǥ���褦�ˤʤ�ޤ��� ��������ϡ��ƤӽФ������Ĥ��뤳�Ȥ��Ǥ��ޤ����ޤ��ϡ��ȥ�������λ�����ݤ˼�ưŪ���Ĥ����ޤ���
�ؿ��ˤ�ä��֤���륫������̾�ϡ��ƤӽФ����ǻ��ꤹ�뤫���ޤ��ϼ�ư����������ޤ��� �ʲ�����ϡ��ƤӽФ����ǥ�������̾����ꤹ����ˡ���Ƥ��ޤ���
CREATE TABLE test (col text); INSERT INTO test VALUES ('123'); CREATE FUNCTION reffunc(refcursor) RETURNS refcursor AS ' BEGIN OPEN $1 FOR SELECT col FROM test; RETURN $1; END; ' LANGUAGE 'plpgsql'; BEGIN; SELECT reffunc('funccursor'); FETCH ALL IN funccursor; COMMIT;
�ʲ��ϡ���������̾��ư������������Ǥ���
CREATE FUNCTION reffunc2() RETURNS refcursor AS ' DECLARE ref refcursor; BEGIN OPEN ref FOR SELECT col FROM test; RETURN ref; END; ' LANGUAGE 'plpgsql'; BEGIN; SELECT reffunc2(); reffunc2 -------------------- <unnamed cursor 1> (1 row) FETCH ALL IN "<unnamed cursor 1>"; COMMIT;