¾�ΥС�������ʸ�� �� 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

38.5. ����Ū��ʸ

���ᤪ��Ӽ���Ǥϡ�����Ū��PL/pgSQL�Dz�ᤵ��롢���Ƥμ����ʸ�ˤĤ����������ޤ��� �����μ����ʸ�Ȥ���ǧ����ʤ���Τ����ơ�SQL���ޥ�ɤǤ���Ȳ��ꤵ�졢項38.5.2�����項38.5.3�ˤ����Ƶ��Ҥ����褦�ˡ��ᥤ��ǡ����١������󥸥����������¹Ԥ���ޤ���

38.5.1. ����

�ͤ�PL/pgSQL�ѿ����⤷���Ϲ�/�쥳���ɥե�����ɤ�����������ϰʲ��Τ褦�˵��Ҥ��ޤ���

variable := expression;

��Ҥ����̤ꡢ���Τ褦��ʸ��ˤ��뼰�ϡ��ᥤ��ǡ����١������󥸥�����������SELECT SQL���ޥ�ɤˤ�ä�ɾ������ޤ��� ����1�Ĥ��ͤ��������ʤ���Фʤ�ޤ���

���η�̥ǡ��������ѿ��Υǡ������˰��פ��ʤ���硢�ޤ��ϡ��ѿ�����char(20)�Τ褦�ˡ�������礭��/���٤���ľ�硢��̤��ͤ� PL/pgSQL���󥿥ץ꥿�ˤ�äơ���̤η��ν��ϴؿ����ѿ��η������ϴؿ�����Ѥ��ư���Ū���Ѵ�����ޤ��� ����ˤ�ꡢ����ͤ�ʸ������������ϴؿ��Ǽ����դ��뤳�Ȥ��Ǥ��ʤ����ˡ����ϴؿ��ˤ����Ƽ¹Ի����顼��ȯ�������ǽ�������뤳�Ȥ����դ��Ƥ���������

�㡧

tax := subtotal * 0.06;
my_record.user_id := 20;

38.5.2. ��̤�ȼ��ʤ����ޥ�ɤμ¹�

�㤨�С�RETURNING��Τʤ�INSERT�Τ褦�ˡ��Ԥ��֤��ʤ� SQL �Υ��ޥ�ɤˤ����ơ�ñ�˵��Ҥ��뤳�Ȥˤ�ä�PL/pgSQL�ؿ��������ǥ��ޥ�ɤ�¹ԤǤ��ޤ���

���ޥ�ɤΥƥ����Ȥ˸�������Ƥ�PL/pgSQL�ѿ�̾�⡢�ѥ�᡼���Υ���ܥ���֤��������ޤ��� ���θ塢�¹Ի��Υѥ�᡼���ͤȤ��ơ����λ������ѿ��ͤ��󶡤���ޤ��� ����ϰ����˽Ҥ٤����˴ؤ��������Ʊ���Ǥ��� �ܺ٤�項38.10.1�򸫤Ƥ��������� �ʲ�����򼨤��ޤ���

DECLARE
    key TEXT;
    delta INTEGER;
BEGIN
    ...
    UPDATE mytab SET val = val + delta WHERE id = key;

���ޥ�ɤΥƥ����Ȥϡ�SQL �票�󥸥󤫤鲼�Τ褦�˸����ޤ���

    UPDATE mytab SET val = val + $1 WHERE id = $2;

�̾盧�Τ褦�˹ͤ��뤳�ȤϤ���ޤ��󤬡���ʸ���顼��å������β����Ϥ�ɬ�פʻ��ϡ����β�᤬ͭ�ѤȤʤ�ޤ���

注意

PL/pgSQL�ϡ��ؿ��ˤ�������������ѿ��Ȱ��פ������Ƥμ��̻Ҥؤ��ִ���Ԥ��ޤ��� �������äơ��ؿ���Υ��ޥ�ɤǻ��Ȥ��ʤ���Фʤ�ʤ��ơ��֥�̾����̾�ޤ��ϴؿ�̾��Ʊ��̾�����ѿ��˻��Ѥ���Τϡ���Ŭ�ڤʹͤ��Ǥ��� �ܺ٤�項38.10.1�򸫤Ƥ���������

SQL ���ޥ�ɤ����Τ褦�˼¹Ԥ����ȡ�PL/pgSQL�ϥ��ޥ�ɤ���٤����ײ褷���ǡ����١�����³�����Ǥ����ޤǡ��ʸ�μ¹ԤǺ����Ѥ��ޤ��� �����ξܺ٤�項38.10.2�򸫤Ƥ���������

���ޤ����䤤��碌SELECT��ɾ�����Ʒ�̤��˴����뤳�Ȥ������Ω�ľ�礬����ޤ��� �㤨�С��ؿ��θƤӽФ��ˤ����ơ�����Ū�����̤�����Ǥ��뤬����̤�̵�ѤǤ�����Ǥ��� ���Τ褦�ʻ�PL/pgSQL�Ǥϡ�PERFORMʸ����Ѥ��Ƥ���������

PERFORM query;

�����query��¹Ԥ������η�̤��˴����ޤ��� SQL��SELECTʸ��Ʊ����ˡ��query�򵭽Ҥ��ޤ������ǽ�Υ������SELECT��PERFORM���֤������Ƥ��������� ��̤��֤��ʤ����ޥ�ɤ�Ʊ�ͤˡ�PL/pgSQL�ѿ����䤤��碌���֤�������졢�ײ��Ʊ�ͤ˥���å��夵��ޤ��� �ޤ����ü���ѿ��Ǥ���FOUND���䤤��碌��̤�1�ԤǤ��������줿���Ͽ������ꤵ�졢��������ʤ����ϵ������ꤵ��ޤ���項38.5.5�򸫤Ƥ��������ˡ�

注意: ľ��SELECT�򵭽Ҥ���С����η�̤����뤳�Ȥ��Ǥ���ȹͤ��뤫�⤷��ޤ��󤬡��������Ǥ����Ԥ���ˡ��PERFORM��������ޤ��� SELECT�Τ褦�˹Ԥ��֤�SQL���ޥ�ɤϡ����顼�Ȥ��Ƶ��䤵��ޤ��� �ʤ���INTO���ͭ��������㳰�Ǥ��ꡢ������������ޤ���

�ʲ�����򼨤��ޤ���

PERFORM create_mv('cs_session_page_requests_mv', my_query);

38.5.3. 1�Ԥη�̤��֤��䤤��碌�μ¹�

1�Ԥ��֤���¿ʬ��ʣ����Ρ�SQL ���ޥ�ɤη�̤ϡ��쥳�����ѿ����Է����ѿ����������ѿ��Υꥹ�Ȥ��������뤳�Ȥ��Ǥ��ޤ��� ����ϡ�����Ū��SQL ���ޥ�ɤ򵭽Ҥ��ơ������INTO����ɲä��뤳�Ȥˤ�äƹԤ��ޤ��� �ʲ�����򼨤��ޤ���

SELECT select_expressions INTO [STRICT] target FROM ...;
INSERT ... RETURNING expressions INTO [STRICT] target;
UPDATE ... RETURNING expressions INTO [STRICT] target;
DELETE ... RETURNING expressions INTO [STRICT] target;

�����ǡ�target�ϥ쥳�����ѿ������ѿ������뤤�ϡ�ñ����ѿ��ȥ쥳����/���ѿ��Υե�����ɤ򥫥�ޤǶ��ڤä��ꥹ�ȤǤ��� PL/pgSQL�ѿ����ִ�����ƻĤ���䤤��碌�Ȥʤꡢ�Ԥ��֤��ʤ����ޥ�ɤˤ����ƽҤ٤��褦�˷ײ褬����å��夵��ޤ��� ���Τ褦�˺�ư����Τϡ�RETURNING��ȼ�ä�INSERT/UPDATE/DELETE��SELECT����ӹԥ��åȤη�̤��֤��桼�ƥ���ƥ����ޥ�ɡ��㤨�С�EXPLAIN�ˤǤ��� INTO��ʳ��Ǥϡ�SQL ���ޥ�ɤ�PL/pgSQL�γ����˵��Ҥ�����Τ�Ʊ���Ǥ���

ティップ: �̾��PostgreSQL��SELECT INTOʸ�Ǥϡ�INTO���оݤϿ��������������ơ��֥�Ǥ��� ��������INTO��ȼ�ä�SELECT�Ǥϡ����β�᤬�̾���礭���ۤʤ뤳�Ȥ����դ��Ƥ��������� PL/pgSQL �ؿ�������SELECT�η�̤���ơ��֥��������������ϡ�CREATE TABLE ... AS SELECT��ʸ����Ѥ��Ƥ���������

�Ԥޤ����ѿ��ꥹ�Ȥ��оݤ˻��Ѥ��줿��硢����ȥǡ������ˤ������䤤��碌�η�̤��оݤι�¤�����Τ˰��פ��ʤ���Фʤ�ޤ��� ����ʤ��ȡ��¹Ի����顼��ȯ�����ޤ��� �쥳�����ѿ����оݤξ��ϡ��䤤��碌��̤���ιԷ��˼�ʬ���Ȥ�ưŪ�����ꤷ�ޤ���

INTO��ʳ��ϡ�����SELECTʸ���̾��SELECT SQL���ޥ�ɤ�Ʊ��Ǥ��ꡢSELECT�����Ƥε�ǽ����Ѥ��뤳�Ȥ��Ǥ��ޤ���

INTO���SQL���ޥ�ɤΤۤȤ��Ǥ�դξ��˵��Ҥ��뤳�Ȥ��Ǥ��ޤ��� ����Ū�ˤϡ�SELECTʸ�ˤ����Ƥ�select_expressions��ľ���ޤ���ľ��ˡ�¾�Υ��ޥ�ɤˤ����Ƥ�ʸ�ν����˵��Ҥ���ޤ��� ����PL/pgSQL�Υѡ��������ʤˤʤ���������ơ����ν����˽������Ȥ�侩���ޤ���

INTO��ˤ�����STRICT�����ꤵ��ʤ���硢target���䤤��碌���֤��ǽ�ιԤȤʤꡢ�Ԥ��֤��ʤ�����NULL�Ȥʤ�ޤ��� ��"t�ǽ�ι�"�Ȥ�ORDER BY����Ѥ��ʤ�������Ǥ��ʤ����Ȥ����դ��Ƥ����������� 2���ܰʹߤιԤη�̤ϡ������˴�����ޤ��� �ü��FOUND�ѿ���Ĵ�٤ơ��ɤιԤ��֤��줿���Τ뤳�Ȥ��Ǥ��ޤ��� ��項38.5.5�򻲾Ȥ��Ƥ��������� �ʲ�����򼨤��ޤ���

SELECT * INTO myrec FROM emp WHERE empname = myname;
IF NOT FOUND THEN
    RAISE EXCEPTION 'employee % not found', myname;
END IF;

STRICT���ץ���󤬻��ꤵ�줿��硢�䤤��碌�����Τ� 1�Ԥ��֤��ʤ���Фʤ�ޤ��� ����ʤ��ȡ��Ԥ��ʤ�����NO_DATA_FOUND��2�԰ʾ夬�֤ä�����TOO_MANY_ROWS�μ¹Ի����顼�������ޤ��� ���顼����ª���������ϡ��㳰�֥��å�����ѤǤ��ޤ��� �ʲ�����򼨤��ޤ���

BEGIN
    SELECT * INTO STRICT myrec FROM emp WHERE empname = myname;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            RAISE EXCEPTION 'employee % not found', myname;
        WHEN TOO_MANY_ROWS THEN
            RAISE EXCEPTION 'employee % not unique', myname;
END;

STRICT����ꤷ�����ޥ�ɤ��������뤿��ˤϡ�FOUND�ѿ����˿������ꤷ�Ƥ���������

STRICT�����ꤵ��ʤ����Ǥ⡢RETURNING��ȼ�ä�INSERT/UPDATE/DELETE��2�԰ʾ���֤������ϡ����顼�Ȥʤ�ޤ��� �ʤ��ʤ顢�ɤ�1�Ԥ��֤������ꤹ��ORDER BY�Τ褦�ʥ��ץ����¸�ߤ��ʤ�����Ǥ���

注意: STRICT���ץ����ϡ�Oracle��PL/SQL��SELECT INTO����Ӵ�Ϣ����ʸ���б����ޤ���

SQL���䤤��碌���֤�ʣ���Ԥη�̤�������������ϡ�項38.6.4�򻲾Ȥ��Ƥ���������

38.5.4. ưŪ���ޥ�ɤμ¹�

PL/pgSQL�ؿ��������ǡ�ưŪ���ޥ�ɡ��Ĥޤ�¹Ԥ����٤��̤Υơ��֥���̤Υǡ���������Ѥ��륳�ޥ�ɤ��ۤ����Ȥ������Ȥ��褯����Ǥ��礦�� PL/pgSQL���̾�Ԥ����ޥ�ɤηײ�Υ���å���ϡ�項38.10.2�ǽҤ٤��褦�ˡˤ��Τ褦�ʾ����Ǥ�ư��ޤ��� ���μ������򰷤�����ˡ��ʲ���EXECUTEʸ���Ѱդ���Ƥ��ޤ���

EXECUTE command-string [ INTO [STRICT] target ];

�����ǡ�command-string�ϼ¹Ԥ���륳�ޥ�ɤ�ޤ��text���Ρ�ʸ����˽��ä�ɾ�����ǡ� target�ϥ쥳�����ѿ������ѿ������뤤�ϡ�ñ����ѿ��ȥ쥳����/���ѿ��Υե�����ɤ򥫥�ޤǶ��ڤä��ꥹ�ȤǤ���

PL/pgSQL�ѿ��ϡ����α黻�ѤΥ��ޥ��ʸ������ִ�����ޤ��� �ɤ��ѿ����ͤ⡢���ޥ��ʸ��������������������ޤʤ���Фʤ�ޤ���

�ޤ���EXECUTE���Ф��Ƽ¹Ԥ���륳�ޥ�ɤηײ�򥭥�å��夹�뤳�ȤϤ���ޤ��� ����ˡ����ޥ�ɤ�ʸ���¹Ԥ������˽�������ޤ��� �������äơ��ۤʤ�ơ��֥������Ф�������¹ԤǤ���褦�ˡ����ޥ��ʸ�����ؿ�������ưŪ�˺������뤳�Ȥ��Ǥ��ޤ���

INTO��ϡ��Ԥ��֤�SQL���ޥ�ɤη�̤���������٤�������ꤷ�ޤ��� �Ԥޤ����ѿ��ꥹ�Ȥ��Ѥ��������������䤤��碌�η�̤ι�¤�����Τ˰��פ��ʤ���Фʤ�ޤ��� (�쥳�����ѿ������Ѥ�����������ϼ�ʬ���Ȥ��̤ι�¤�ȼ�ưŪ�˰��פ����ޤ�)�� ʣ���ιԤ��֤��줿�����ǽ�ιԤ�����INTO�ѿ�����������ޤ��� 1�Ԥ��֤���ʤ�����NULL ��INTO�ѿ�����������ޤ��� INTO�礬���ꤵ��ʤ������䤤��碌�η�̤ϼΤƤ��ޤ���

STRICT���ץ���󤬻��ꤵ�줿�����䤤��碌�η�̤����Τ�1�Ԥξ�����������顼�Ȥʤ�ޤ���

SELECT INTO��EXECUTE�Ǥϸ��ߥ��ݡ��Ȥ���ޤ��� ����ˡ�SELECT���ޥ�ɤμ¹Ԥˤ�����INTO�򵭽Ҥ���EXECUTE�ΰ����Ȥ��Ƥ���������

注意: PL/pgSQL EXECUTEʸ��PostgreSQL�����Фǥ��ݡ��Ȥ���Ƥ���EXECUTESQLʸ�Ȥϴ�Ϣ������ޤ��� �����Ф�EXECUTEʸ��PL/pgSQL�ؿ���ǻ��Ѥ��뤳�ȤϤǤ��ޤ���ʻ��Ѥ���ɬ�פ⤢��ޤ���ˡ�

ưŪ���ޥ�ɤ�¹Ԥ������PL/pgSQL�Ǥ�ñ�������򥨥������פ��ʤ���Фʤ�ޤ��� �侩�����Τϡ��ؿ����Τˤ��������Υƥ����Ȥ�ɥ������ǰϤ���ˡ�Ǥ� �ʥɥ��������Ѥ��ʤ��켰�Υ����ɤ���ͭ���Ƥ�����ϡ�項38.11.1�γ��פ򻲾Ȥ��뤳�Ȥ������򤷤䤹�������ɤؤ��Ѵ���Ȥμ�����ˤʤ�ޤ��ˡ�

���������䤤��碌���������٤�ưŪ���ͤϡ����켫�Ȥ������˰������ޤ��ǽ�������뤿�ᡢ���տ���������ɬ�פǤ��� �ʲ�����򼨤��ޤ��ʤ����Ǥϴؿ��˥ɥ��������Ѥ�����ˡ����Ѥ���Ȳ��ꤷ�Ƥ���Τǡ����������Ų�����ɬ�פϤ���ޤ���ˡ�

EXECUTE 'UPDATE tbl SET '
        || quote_ident(colname)
        || ' = '
        || quote_literal(newvalue)
        || ' WHERE key = '
        || quote_literal(keyvalue);

������ϡ�quote_ident��quote_literal�ؿ��λ�����ˡ�򼨤��Ƥ��ޤ��� �����Τ��ᡢ��ȥơ��֥�μ��̻Ҥ�ޤ�Ǥ��뼰��quote_ident�ؿ����̤��ʤ���Фʤ�ޤ��� ưŪ�˹��ۤ���륳�ޥ����ǡ���ƥ��ʸ����Ȥʤ�٤��ͤ�ޤ�Ǥ��뼰��quote_literal�ؿ����̤��ʤ���Фʤ�ޤ��� ξ���Ȥ⡢Ŭ�ڤʽ�����Ԥ������Ϥ��줿�ƥ����Ȥ�ñ�������⤷������Ű�����dz�ꡢ�ü�ʸ��������Ŭ�ڤ˥��������פ������������Τ��֤��ޤ���

�ɥ���������ˡ�ϰ���Υƥ����Ȥ�Ϥ������ͭ�Ѥ��Ȥ������Ȥ����դ��Ƥ��������� �����򼡤Τ褦�ˤ���Τϡ��ȤƤⰭ���ͤ��Ǥ���

EXECUTE 'UPDATE tbl SET '
        || quote_ident(colname)
        || ' = $$'
        || newvalue
        || '$$ WHERE key = '
        || quote_literal(keyvalue);

�ʤ��ʤ顢newvalue�����Ƥ����ޤ���$$��ޤ���ϡ�����Ǽ��ν����ذܤäƤ��ޤ�����Ǥ��� Ʊ�ͤ���¬���֤ϡ��ɥ�������¾�ζ��ڤ�ʸ������������ⵯ����ޤ��� �������äơ��ƥ����Ȥ����Ƥ����ΤǤʤ����ϡ������Τ����quote_literal�ؿ���������ʤ���Фʤ�ޤ�����

ưŪ�䤤��碌��EXECUTE��Ĺ������例38-6�Ǹ��뤳�Ȥ��Ǥ��ޤ��� ����Ͽ������ؿ���������뤿���CREATE FUNCTION���ޥ�ɤ��Ѥ��Ƽ¹Ԥ����ΤǤ���

38.5.5. ��̥��ơ������μ���

���ޥ�ɤθ��̤�Ƚ�Ǥ���ˤϡ������Ĥ���ˡ������ޤ��� �ǽ����ˡ�ϡ��ʲ��Τ褦�ʷ�����GET DIAGNOSTICS����Ѥ�����ˡ�Ǥ���

GET DIAGNOSTICS variable = item [ , ... ];

���Υ��ޥ�ɤˤ�äơ������ƥॹ�ơ��������󥸥���������Ф����Ȥ��Ǥ��ޤ��� ��item�ϡ����ꤵ�줿�ѿ��˳�����Ƥ�줿�����ͤ��̤��뤿��Υ�����ɤǤ��ʤ���ϼ�����뤿����������ǡ������Ǥʤ���Фʤ�ޤ���ˡ� ���߻��Ѳ�ǽ�ʥ��ơ��������ܤϡ�ROW_COUNT��RESULT_OID��2�ĤǤ��� ROW_COUNT�ϡ��Ǹ��SQL���󥸥���������줿SQL���ޥ�ɤˤ�äƽ������줿�Կ��򼨤��ޤ��� RESULT_OID�ϡ��Ǥ�Ƕ��SQL���ޥ�ɤˤ�ä��������줿�Ǹ�ιԤ�OID�Ǥ��� RESULT_OID��OID ����ͭ����ơ��֥�ؤ�INSERT���ޥ�ɤθ�ǤΤ�ͭ�դǤ��뤳�Ȥ����դ��Ƥ���������

�ʲ�����򼨤��ޤ���

GET DIAGNOSTICS integer_var = ROW_COUNT;

2���ܤΥ��ޥ�ɤθ��̤�Ƚ�Ǥ�����ˡ�ϡ�FOUND�Ȥ���boolean�����ü���ѿ�������å����뤳�ȤǤ��� PL/pgSQL�γƴؿ���ǻ��Ѥ����ݡ�FOUND�Ϻǽ�ϵ������ꤵ��Ƥ��ޤ��� �ʲ��Τ褦�ˡ����줾���ʸ�μ���ˤ�ä����꤬�ѹ�����ޤ���

FOUND�ϳơ���PL/pgSQL�ؿ������Υ��������ѿ��Ǥ��� FOUND���Ф��ƹԤ�줿���Ƥ��ѹ��ϡ����ߤδؿ��ˤΤ߱ƶ����ޤ���

38.5.6. �ޤä������⤷�ʤ�

���⤷�ʤ��ץ졼���ۥ��ʸ��ͭ�Ѥˤʤ뤳�Ȥ�����ޤ��� �㤨�С�IF/THEN/ELSEʸ�ΰ�������ʸ�Ǥ��뤳�Ȥ��������������Ǥ��� ���Τ褦����Ū�ˤϡ�NULLʸ����Ѥ��ޤ���

NULL;

�㤨�С�����2�ĤΥ����ɤ�Ʊ���Ǥ���

    BEGIN
        y := x / 0;
    EXCEPTION
        WHEN division_by_zero THEN
            NULL;  -- �����̵�뤹��
    END;

    BEGIN
        y := x / 0;
    EXCEPTION
        WHEN division_by_zero THEN  -- �����̵�뤹��
    END;

�ɤ��餬˾�ޤ����Ȼפ����ϡ����ߤ�����Ǥ���

注意: Oracle��PL/SQL�Ǥϡ�̵���Ҥ�ʸ�ϵ�����ʤ��Τ�NULLʸ��ɬ���Ȥʤ�ޤ��� �����ȿ���� PL/pgSQL�Ǥϡ�̵���Ҥ�ʸ�����Ĥ���Ƥ��ޤ���