���湽¤�Ϥ����餯PL/pgSQL�Τ�äȤ�ͭ��(���Ľ���)����ʬ�Ǥ���PL/pgSQL �����湽¤����Ѥ��ơ�PostgreSQL �Υǡ��������˽��𡢶��Ϥ����뤳�Ȥ��Ǥ��ޤ���
RETURN expression;
�� (expression) ������ RETURN �ϡ����åȤ��֤��ʤ� PL/pgSQL �ؿ����������ͤ����뤿��˻��Ѥ���ޤ��� �ؿ��Ͻ�λ����expression ���ͤ��ƤӽФ������֤���ޤ���
ʣ�� (��) ���ͤ��֤��ˤϡ��쥳���ɤޤ��Ϲ��ѿ��� expression �Ȥ��Ƶ��Ҥ���ɬ�פ�����ޤ��� �����鷿���֤��ݤϡ��ɤμ��Ǥ���Ѳ�ǽ�Ǥ��� ���μ��η�̤ϡ���ưŪ�˴ؿ������������ͷ��˥��㥹�Ȥ���ޤ��� (�ؿ��� void �����֤��褦�����������硢���Ͼ�ά��ǽ�Ǥ������ɤΤ褦�ʾ��Ǥ�̵�뤵��ޤ���)
�ؿ�������ͤ�̤����Ȥ������ޤޤˤ��뤳�ȤϤǤ��ޤ��� ���椬��RETURN ʸ���ʤ����֤Ǵؿ��κǾ�̤Υ֥��å��ν����ޤ�ã�����Ȥ����¹Ի����顼��ȯ�����ޤ���
PL/pgSQL �ؿ��� SETOF sometype ���֤��褦�����������硢��³�ν�����¿���㤤�ޤ��� ���ξ�硢����ͤθġ��ι��ܤϡ�RETURN NEXT ���ޥ�ɤǻ��ꤵ��ޤ��������ơ������Τʤ��Ǹ�� RETURN ���ޥ�ɤˤ�ꡢ�ؿ����¹Ԥ�λ�������Ȥ�������ޤ��� RETURN NEXT �ϡ������鷿�����ʣ�緿��ξ���ǻ��Ѥ��뤳�Ȥ��Ǥ��ޤ���ʣ�緿�ξ�硢��̤Ρ֥ơ��֥�����Τ��֤���ޤ��� RETURN NEXT ����Ѥ���ؿ��ϡ��ʲ��Τ褦�ʷ����ǸƤӽФ���ޤ���
SELECT * FROM some_func();
�Ĥޤꡢ�ؿ��� FROM ��ǥơ��֥�Υ������Ȥ��ƻ��Ѥ���ޤ���
RETURN NEXT expression;
�ºݤˤϡ�RETURN NEXT �ϴؿ������ͤ��֤��Ƥ���ΤǤϤ���ޤ���ñ�˼����� �ʤ⤷�����֤����ǡ������˱����ƥ쥳�����ѿ��ޤ��Ϲ��ѿ�) ����¸���Ƥ�������Ǥ��� �����ơ����μ¹Ԥ� PL/pgSQL �ؿ���μ���ʸ�˷�³���ޤ��� RETURN NEXT ���ޥ�ɤ�Ϣ³���Ƽ¹Ԥ����ȡ���̥��åȤ���������ޤ��� �Ǹ�� RETURN (���������ꤷ�ʤ�ɬ�פ�����ޤ�) �ˤ�ꡢ�ؿ��ν�λ�����椷�ޤ���
Note: �嵭�Τ褦�ˡ�PL/pgSQL �ˤ����� RETURN NEXT �θ��ߤμ����Ǥϡ��ؿ������֤�������˷�̥��å����Τ��ݴɤ��ޤ��� ����ˤ�ꡢPL/pgSQL �ؿ����������̤η�̥��åȤ��֤�����硢�ѥե����ޥ��㲼�����ǽ��������ޤ��� ����ξ��פ��뤿�ᡢ�ǡ����ϥǥ������˽��ޤ�ޤ������������ؿ����Τϡ���̥��å����Τ����������ޤǤ��֤�ޤ��� ����� PL/pgSQL �ΥС������Ǥϡ��������¤�������˥��åȤ��֤��ؿ���桼��������Ǥ���褦�ˤʤ뤫�⤷��ޤ��� ���ߡ��ǥ������˽��ޤ��ǡ����γ������ϡ�SORT_MEM �����ѿ��ˤ�ä����椵��Ƥ��ޤ��� ���̤η�̥��åȤ��ݴɤ���Τ˽�ʬ�ʥ��꤬�����硢�����ԤϤ��Υѥ������ͤ��礭�����뤳�Ȥ��θ���٤��Ǥ���
IF ʸ�Ϥ�����˴�Ť��ƥ��ޥ�ɤ�¹Ԥ����ޤ��� PL/pgSQL �ˤϡ��ʲ��Τ褦�� 4 �Ĥ� IF �η���������ޤ���
IF ... THEN
IF ... THEN ... ELSE
IF ... THEN ... ELSE IF and
IF ... THEN ... ELSIF ... THEN ... ELSE
IF boolean-expression THEN statements END IF;
IF-THEN ʸ�ϡ��Ǥ�ñ��� IF �η����Ǥ���THEN �� END IF�δ֤�ʸ�� ��郎���ξ��˼¹Ԥ���ޤ�������ʤ���Ф��������Ф���ޤ���
IF v_user_id <> 0 THEN UPDATE users SET email = v_email WHERE user_id = v_user_id; END IF;
IF boolean-expression THEN statements ELSE statements END IF;
IF-THEN-ELSE ʸ�� IF-THEN �˲ä������ɾ�������ξ��˼¹Ԥ��٤�ʸ�ν������ꤵ���뤳�Ȥ��Ǥ��ޤ���
IF parentid IS NULL or parentid = '''' THEN return fullname; ELSE return hp_true_filename(parentid) || ''/'' || fullname; END IF; IF v_count > 0 THEN INSERT INTO users_count(count) VALUES(v_count); return ''t''; ELSE return ''f''; END IF;
�ʲ�����Τ褦�� IF ʸ������Ҥˤ��뤳�Ȥ��Ǥ��ޤ���
IF demo_row.sex = ''m'' THEN pretty_sex := ''man''; ELSE IF demo_row.sex = ''f'' THEN pretty_sex := ''woman''; END IF; END IF;
���η�������Ѥ����硢�ºݤ� IF ʸ��¦�� IF ʸ�� ELSE ����ʬ����¦������Ҥˤ��Ƥ��ޤ������äơ�����Ҥˤ��� IF ��� 1 �Ĥ�END IF ʸ�������οƤȤʤ� IF-ELSE ��1�Ĥ�END IF ʸ��ɬ�פǤ�������ˤ�������ư��Ǥ��ޤ������������٤����䤬¿���������Ĺ���餷���ʤ�ޤ���
IF boolean-expression THEN statements [ ELSIF boolean-expression THEN statements [ ELSIF boolean-expression THEN statements ...]] [ ELSE statements ] END IF;
IF-THEN-ELSIF-ELSE �ϡ�����ʸ��¿�������ؼ��ʤ�������Υ����å��ˡ������������ˡ�����ޤ��� ���Ȥ��Ƥϡ�IF-THEN-ELSE-IF-THEN ���ޥ�ɤ�����Ҥˤ�����Τ�Ʊ���Ǥ�����ɬ�פ� END IF �� 1 �Ĥ����Ǥ���
�ʲ�������ޤ���
IF number = 0 THEN result := ''zero''; ELSIF number > 0 THEN result := ''positive''; ELSIF number < 0 THEN result := ''negative''; ELSE -- �դ��ࡢ�Ĥ�ͣ��β�ǽ���Ϥ��ο��� NULL �Ǥ��뤳�Ȥ� result := ''NULL''; END IF;
�Ǹ�� ELSE ��Ͼ�ά��ǽ�Ǥ���
LOOP��EXIT��WHILE��FOR ʸ����Ѥ��ơ�PL/pgSQL �ؿ��ǡ����ޥ�ɷ����֤����Ȥ��Ǥ��ޤ���
[<<label>>]
LOOP
statements
END LOOP;
LOOP �ϡ�EXITʸ�ޤ���RETURN ʸ�ˤ�äƽ�λ�����ޤ�̵�¤˷����֤���롢���̵���Υ롼�פ�������ޤ�����٥륪�ץ����ϡ�����Ҿ��롼�����EXIT ʸ�ǡ��ɤΥ�٥������Ҥ���λ���뤫����ꤹ�뤿��˻��Ѥ���ޤ���
EXIT [ label ] [ WHEN expression ];
label �����ꤵ��ʤ���硢�Ǥ���¦�Υ롼�פ餻��END LOOP �μ���ʸ�����θ�˼¹Ԥ���ޤ���label �����ꤵ�줿��硢����ϸ��ߤΥ롼�ס��⤷���ϡ�����Ҥˤʤä��롼�פ�֥��å��γ�¦�Υ�٥�Υ�٥�Ǥ���ɬ�פ�����ޤ������θ塢��̾���줿�롼�פޤ��ϥ֥��å��餻�����Υ롼�פޤ��ϥ֥��å����б����� END �μ���ʸ�������ܤ��ޤ���
WHEN �������硢���ꤵ�줿��郎���ξ��Τߥ롼�פν�λ��������ޤ��� ����ʤ���С�EXIT �θ�ιԤ����椬�ܤ�ޤ���
��
LOOP -- ���餫�α黻 IF count > 0 THEN EXIT; -- �롼�פν�λ END IF; END LOOP; LOOP -- ���餫�α黻 EXIT WHEN count > 0; END LOOP; BEGIN -- ���餫�α黻 IF stocks > 100000 THEN EXIT; -- �����Ǥ���LOOP�γ�¦�Ǥ� EXIT �ϻ��ѤǤ��ޤ��� END IF; END;
[<<label>>]
WHILE expression LOOP
statements
END LOOP;
WHILE ʸ�Ͼ�P��ɾ�������Ǥ���֡�ʸ���¤Ӥ��֤��ޤ������ϡ��롼�����Τ��������ˤΤߥ����å�����ޤ���
���Ȥ��С��ʲ��Τ褦�ˤ��ޤ���
WHILE amount_owed > 0 AND gift_certificate_balance > 0 LOOP -- �����DZ黻���Ĥ��Ԥ��ޤ��� END LOOP; WHILE NOT boolean_expression LOOP -- �����DZ黻���Ĥ��Ԥ��ޤ��� END LOOP;
[<<label>>] FOR name IN [ REVERSE ] expression .. expression LOOP statements END LOOP;
���μ����FOR �������ͤ��ϰϤ��֤��롼�פ��������ޤ���name �ѿ����������Ȥ��Ƽ�ưŪ��������졢�롼�������Τߤ�¸�ߤ��ޤ����ϰϤβ��¡���¤Ȥ���Ϳ������2�Ĥμ��ϥ롼�פ����ä����˰��٤���ɾ������ޤ������֤���ߤ��̾� 1 �Ǥ�����REVERSE �����ꤵ�줿���� -1 �Ȥʤ�ޤ���
����FOR�롼�פ����ʲ��˼����ޤ���
FOR i IN 1..10 LOOP -- �����Ĥ������˵��Ҥ��ޤ��� RAISE NOTICE ''i is %'',i; END LOOP; FOR i IN REVERSE 10..1 LOOP -- �����Ĥ������˵��Ҥ��ޤ��� END LOOP;
�̤μ���� FOR �롼�פ���Ѥ��ơ��䤤��碌�η�̤��֤������Υǡ��������Ȥ��Ǥ��ޤ����ʲ��˹�ʸ���ޤ���
[<<label>>]
FOR record | row IN select_query LOOP
statements
END LOOP;
�쥳���ɤޤ��Ϲ��ѿ��ˤϡ������SELECT�䤤��碌�η�̤Τ��٤ƤιԤ��������졢�ƹԤ��Ф��ƥ롼�����Τ��¹Ԥ���ޤ����ʲ�������ޤ���
CREATE FUNCTION cs_refresh_mviews () RETURNS INTEGER AS ' DECLARE mviews RECORD; BEGIN PERFORM cs_log(''Refreshing materialized views...''); FOR mviews IN SELECT * FROM cs_materialized_views ORDER BY sort_key LOOP -- ������ "mviews" �� cs_materialized_views ��1�ĤΥ쥳���ɤ�����ޤ� PERFORM cs_log(''Refreshing materialized view '' || quote_ident(mviews.mv_name) || ''...''); EXECUTE ''TRUNCATE TABLE '' || quote_ident(mviews.mv_name); EXECUTE ''INSERT INTO '' || quote_ident(mviews.mv_name) || '' '' || mviews.mv_query; END LOOP; PERFORM cs_log(''Done refreshing materialized views.''); RETURN 1; end; ' LANGUAGE 'plpgsql';
���Υ롼�פ� EXIT ʸ�ǽ�λ������硢�Ǹ�˳�����Ƥ�줿�Ԥ��ͤϥ롼�פ�ȴ������Ǥ⥢���������뤳�Ȥ��Ǥ��ޤ���
FOR-IN-EXECUTE ʸ�ϥ쥳�������Τ��֤��⤦��Ĥ���ˡ�Ǥ���
[<<label>>]
FOR record | row IN EXECUTE text_expression LOOP
statements
END LOOP;
����ϡ����Ȥ��� SELECT ʸ��ʸ���ǻ��ꤵ���������������η����Ȼ��Ƥ��ޤ��� ���μ��� FOR �롼�פγƥ���ȥ��ɾ�����졢�Ʒײ褬�Ԥ��ޤ�������ˤ�ꡢ�ץ�����ޤϡ��̾�� EXECUTE ʸ��Ʊ���褦�˻����˷ײ褵�줿�䤤��碌�ˤ���®���ȡ�ưŪ���䤤��碌�λ��Ľ����������뤳�Ȥ��Ǥ��ޤ���
Note: PL/pgSQL �ѡ����ϸ��ߤ���(�������֤����쥳���ɤ��֤����Ȥ���)2����� FOR �롼�פ�FOR �θ�ǻ��ꤵ�����Ū�ѿ����쥳����/���ѿ��Ȥ����������Ƥ��뤫�ɤ����Ƕ��̤��Ƥ��ޤ����⤷�ʤ���С������� FOR �롼�פǤ���Ȳ��ꤷ�ޤ��� �ºݤ�����������FOR ���ѿ�̾�νְ㤨�Ȥ��ä����ȤǤ����硢����Ϥɤ��餫�Ȥ�����ľ��Ū�Ǥʤ����顼��å�����������������ޤ���