¾�ΥС�������ʸ�� �� 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

19.7. ��������

�䤤��碌���Τ���٤˼¹Ԥ���ΤǤϤʤ����������������ꤷ�ơ��䤤��碌�򥫥ץ��벽�����䤤��碌�η�̤���٤˿��ԤŤ��ɤߤȤ뤳�Ȥ��Ǥ��ޤ��������Ԥ���ͳ��1�Ĥϡ�������¿���ιԤ�������Υ���θϳ���ɤ����ȤǤ�(��������PL/pgSQL �桼�����̾盧����ۤ���ɬ�פϤ���ޤ���FOR �롼�פϼ�ưŪ�˥������������Ū�˻��Ѥ��ƥ����������ɤ�����Ǥ�)�� ��궽̣����������ˡ�Ȥ��ơ��ƤӽФ������Ԥ��ɤ߼�뤳�ȤΤǤ���褦�ˡ��������줿��������ؤλ��Ȥ��֤���ˡ������ޤ��� ����ˤ�ꡢ�ؿ��������̤ιԥ��åȤ��֤��ݤθ�Ψ�����夷�ޤ���

19.7.1. ���������ѿ������

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 �ѿ��ϡ�������䤤��碌�˷�ӤĤ����Ƥ��ޤ���Τǡ�����Х�����Ǥ���ȸƤФ�ޤ���

19.7.2. ��������򳫤�

�����������Ѥ��ƹԤ���Ф����ˡ��������ɬ�פ�����ޤ�(����� DECLARE CURSOR SQL���ޥ�ɤ�ư���Ʊ���Ǥ�)�� PL/pgSQL �ˤ� 4 ����� OPEN ʸ�����ꡢ������� 2 �Ĥϥ���Х���ɥ��������ѿ�����Ѥ����Ĥ�� 2 �ĤϥХ���ɥ��������ѿ�����Ѥ��ޤ���

19.7.2.1. OPEN FOR SELECT

OPEN unbound-cursor FOR SELECT ...;

���������ѿ��ϳ����졢�¹Ԥ���褦���ꤷ���䤤��碌����Ϳ����ޤ������˳�������������򳫤����ȤϤǤ������ޤ�������Х���ɥ�������Ȥ���(�Ĥޤꡢñ�ʤ� refcursor �ѿ��Ȥ���)�������Ƥ��ʤ���Фʤ�ޤ��� SELECT �䤤��碌�ϡ�¾�� PL/pgSQL �� SELECT ʸ��Ʊ�ͤ���ˡ�ǰ����ޤ��� PL/pgSQL ���ѿ�̾���֤�������졢�䤤��碌�ײ�Ϻ����ѤǤ���褦�˥���å��夵��ޤ���

OPEN curs1 FOR SELECT * FROM foo WHERE key = mykey;

19.7.2.2. OPEN FOR EXECUTE

OPEN unbound-cursor FOR EXECUTE query-string;

���������ѿ��ϳ����졢�¹Ԥ���褦���ꤷ���䤤��碌����Ϳ����ޤ������˳�������������򳫤����ȤϤǤ������ޤ�������Х���ɥ�������Ȥ���(�Ĥޤꡢñ�ʤ� refcursor �ѿ��Ȥ���)�������Ƥ��ʤ���Фʤ�ޤ��� �䤤��碌�ϡ�EXECUTE ���ޥ�ɤ�Ʊ����ˡ�ˤ��ʸ���󼰤Ȥ��ƻ��ꤵ��ޤ��� �̾��Ʊ�ͤˡ�����ˤ�ꡢ����˼¹Ԥ���ݤ˰�ä��䤤��碌�򤹤뤳�Ȥ��Ǥ���������������ޤ���

OPEN curs1 FOR EXECUTE ''SELECT * FROM '' || quote_ident($1);

19.7.2.3. �Х���ɥ�������� OPEN

OPEN bound-cursor [ ( argument_values ) ];

��������䤤��碌����ӤĤ����륫�������ѿ��򳫤�����˻��Ѥ���� OPEN �η����Ǥ������˳�������������򳫤����ȤϤǤ��ޤ��󡣼°�����ɾ�����ϥ������뤬������Ȥ��Τ�������줿���ˤΤ߸���ޤ��� �������ͤϡ��䤤��碌������֤��������ޤ����Х���ɥ���������䤤��碌�ײ�Ͼ�˥���å����ǽ�Ȥߤʤ���ޤ��� ���ξ��������� EXECUTE �Ϥ���ޤ���

OPEN curs2;
OPEN curs3(42);

19.7.3. ����������

��������򳫤��Ƥ��顢��������������ʸ����Ѥ��ƥ�������򰷤����Ȥ��Ǥ��ޤ���

���������ϡ���������򳫻Ϥ��뤿��˳��������δؿ���ǹԤ�ɬ�פϤ���ޤ��� �ؿ����� refcursor �ͤ��֤����ƤӽФ����Ǥ��Υ�����������򤵤��뤳�Ȥ�Ǥ��ޤ�(����Ū�ˤ�refcursor�ͤϡ���������ؤ�ͭ�����䤤��碌����ĥݡ�����(����)��̾���򼨤�ñ�ʤ�ʸ����Ǥ�������̾���ϡ��ݡ������������Ȥʤ���¾��refcursor�����ѿ����������뤳�Ȥǡ�¾���Ϥ����Ȥ��Ǥ��ޤ�)��

���ƤΥݡ�����ϡ�����Ū�˥ȥ�󥶥������ν�����Ĥ�����ޤ������äơ�refcursor �ͤϤ��Υȥ�󥶥������ν���ޤǤδ֤Τ߳�������������ؤλ��ȤȤ���ͭ���Ǥ���

19.7.3.1. FETCH

FETCH cursor INTO target;

FETCH �� SELECT INTO ��Ʊ�ͤˡ��������뤫�鼡�ιԤ���Ф����оݤ˳�Ǽ���ޤ����оݤȤϡ����ѿ����쥳�����ѿ����ޤ���ñ����ѿ��򥳥�ޤǶ��ڤä��ꥹ�ȤǤ��� SELECT INTO �ξ���Ʊ�͡��ü�� FOUND �ѿ��򸡺����뤳�Ȥǡ��Ԥ�����Ǥ������ɤ������ǧ���뤳�Ȥ��Ǥ��ޤ���

FETCH curs1 INTO rowvar;
FETCH curs2 INTO foo,bar,baz;

19.7.3.2. CLOSE

CLOSE cursor;

CLOSE �ϥݡ�������ظ�Υ���������Ĥ��ޤ����������Ѥ��ƥȥ�󥶥������ν���������˥꥽������������뤳�Ȥ��Ǥ����ޤ������������ѿ�������������ٳ������Ȥ��Ǥ��ޤ���

CLOSE curs1;

19.7.3.3. ����������֤�

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;