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

37.6. ����Ū��ʸ

���ᤪ��Ӽ���Ǥϡ�����Ū��PL/pgSQL�Dz�ᤵ��롢���٤Ƥμ����ʸ�ˤĤ����������ޤ��� �����μ����ʸ�Ȥ���ǧ����ʤ���Τ����ơ�SQL���ޥ�ɤǤ���Ȳ��ꤵ�졢(����ʸ�ǻ��Ѥ����PL/pgSQL�ѿ������������������)�ᥤ��ǡ����١������󥸥����������¹Ԥ���ޤ��� ���äơ��㤨�С�INSERT��UPDATE��DELETE SQL���ޥ�ɤϡ�PL/pgSQL ��ʸ�Ȥߤʤ����Ȥ��Ǥ��ޤ����������������ǤϤ����ˤĤ��Ƥϸ��ڤ��ޤ���

37.6.1. ����

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

identifier := expression;

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

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

��

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

37.6.2. SELECT INTO

ʣ��������(������1�ԤΤߤ�)SELECT���ޥ�ɤη�̤ϡ��쥳�����ѿ����Է����ѿ����������ѿ��Υꥹ�Ȥ��������뤳�Ȥ��Ǥ��ޤ��� ����ϡ��ʲ��ˤ�äƹԤ��ޤ���

SELECT INTO target select_expressions FROM ...;

�����ǡ�target�ϥ쥳�����ѿ������ѿ������뤤�ϡ�ñ����ѿ��ȥ쥳����/���ѿ��Υե�����ɤ򥳥�ޤǶ��ڤä��ꥹ�ȤǤ��� select_expressions�ȥ��ޥ�ɤλĤ����ʬ���̾��SQL��Ʊ���Ǥ���

����ϡ�INTO���оݤϿ��������������ơ��֥�Ǥ���Ȥ�����PostgreSQL���̾��SELECT INTO�μ����Ȥ��礭���ۤʤ�ޤ��� PL/pgSQL �ؿ�������SELECT�η�̤���ơ��֥��������������ϡ�CREATE TABLE ... AS SELECT��ʸ����Ѥ��Ʋ�������

�Ԥޤ����ѿ��ꥹ�Ȥ��оݤ˻��Ѥ��줿��硢���򤵤줿�ͤ����Τ��оݤι�¤�˰��פ��ʤ���Фʤ�ޤ��� ����ʤ���С��¹Ի����顼��ȯ�����ޤ��� �쥳�����ѿ����оݤξ��ϡ���ưŪ���䤤��碌��̤���ιԷ��˼�ưŪ�˼��Ȥ����ꤷ�ޤ���

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

�䤤��碌���Ԥ��֤��ʤ���硢NULL�ͤ��оݤ���������ޤ��� �䤤��碌��ʣ���ιԤ��֤���硢�ǽ�ιԤ��оݤ��������졢�Ĥ���˴�����ޤ��� ("�ǽ�ι�"��ORDER BY����Ѥ��Ƥ��ʤ��¤괰�������Τˤʤ�ʤ����Ȥ����դ��Ʋ�������)

���ߡ�INTO���SELECTʸ�ΤۤȤ��Ǥ�դξ��˵��Ҥ��뤳�Ȥ��Ǥ��ޤ�������Ǽ������̤��SELECT������ɤ�ľ��˵��Ҥ��뤳�Ȥ�侩���ޤ��� ����ΥС�������PL/pgSQL�Ǥϡ�INTO��򵭽Ҥ���������¤��ä����뤫�⤷��ޤ���

SELECT INTOʸ��ľ���FOUND����Ѥ��뤳�Ȥˤ�ꡢ�������������Ԥʤ�줿���ɤ���(�Ĥޤꡢ�䤤��碌�ˤ�äƾ��ʤ��Ȥ� 1 �Ԥ��֤��줿���ɤ���)���ǧ���뤳�Ȥ��Ǥ��ޤ��� �ʲ�����򼨤��ޤ���

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

IS NULL������Ѥ��ơ��쥳���ɤ⤷���ϹԷ�̤�NULL���ɤ����򸡺����뤳�Ȥ��Ǥ��ޤ��� ��������¾�ιԤ�¸�ߤ��˴����줿���ɤ�����Ƚ�Ǥ�����ˡ��¸�ߤ��ʤ����Ȥ����դ��Ʋ������� �ʲ��ˡ��Ԥ������֤���ʤ��ä����򰷤���򼨤��ޤ���

DECLARE
    users_rec RECORD;
    full_name varchar;
BEGIN
    SELECT INTO users_rec * FROM users WHERE user_id=3;

    IF users_rec.homepage IS NULL THEN
        -- �桼����homepage�����Ϥ򤷤ʤ��ä��Τ�"https://"���֤���
        RETURN ''http://'';
    END IF;
END;

37.6.3. ��̤��֤��ʤ������⤷�����䤤��碌�μ¹�

��̤�ɬ�פȤ��ʤ��䤤��碌�估��ɾ����Ԥ��������Ȥ�����ޤ�(ľ���������̤�ɬ�פ��ʤ��Ƥ⡢����Ū���������̤˰�̣�򸫽Ф��ؿ��θƤӽФ���ŵ��Ū)�� ����� PL/pgSQL�ǹԤ��ˤϡ�PERFORMʸ����Ѥ��Ʋ�������

PERFORM query;

����ϡ�SELECTʸ�Ǥ���ɬ�פ�����query��¹Ԥ������η�̤��˴����ޤ��� PL/pgSQL�ѿ��ϡ��̾��̤��䤤��碌����֤��������ޤ��� �ޤ����ü���ѿ��Ǥ���FOUND�ϡ��䤤��碌��̤�1�ԤǤ��������줿���Ͽ������ꤵ�졢��������ʤ����ϵ������ꤵ��ޤ���

����: INTO�������ʤ�SELECT�Ǥ��η�̤�̤������Ȥ��Ǥ���ȹͤ��뤫�⤷��ޤ��󤬡��������Ǥϡ������Ԥ���ˡ��PERFORM��������ޤ���

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

PERFORM create_mv(''cs_session_page_requests_mv'', my_query);

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

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

EXECUTE command-string;

�����ǡ�command-string�ϡ��¹Ԥ���륳�ޥ�ɤ����(text����)ʸ�����Ϳ���뼰�Ǥ��� ����ʸ�����SQL���󥸥�ˤ��Τޤ��Ϥ���ޤ���

���Υ��ޥ��ʸ�����ؤ�PL/pgSQL�ѿ����ִ��ϹԤ��ʤ����Ȥˤϡ��ä����դ��Ʋ������� �ѿ����ͤϡ����ޥ��ʸ��������������������ޤʤ���Фʤ�ޤ���

ưŪ���ޥ�ɤ�Ԥ�����PL/pgSQL�Ǥ�ñ�������򥨥������פ��ʤ���Фʤ�ޤ��� ��37.2.1�γ��פ򻲾Ȥ��뤳�Ȥ�����Ȥμ�����ˤʤ뤫�⤷��ޤ���

PL/pgSQL�ˤ�����¾�����ƤΥ��ޥ�ɤȤϰۤʤꡢEXECUTE�ˤ�äƼ¹Ԥ���륳�ޥ�ɤϡ����å�����ͭ����������٤�����ᡢ��¸�����櫓�ǤϤ���ޤ��� ����ˡ����ޥ�ɤ�ʸ���¹Ԥ������˽�������ޤ��� ���ޥ��ʸ����ϡ��ѿ��ơ��֥����˵ڤܤ�Ư����¹Ԥ��뤿��ˡ��ؿ�������ưŪ�˺������뤳�Ȥ��Ǥ��ޤ���

SELECT�䤤��碌�Τ���η�̤�EXECUTE�ˤ�äƼΤƤ��ޤ��� �ޤ���SELECT INTO��EXECUTE�Ǥϸ��ߥ��ݡ��Ȥ���ޤ��� ��̤�ưŪ�˺������줿SELECT�����̤�ȴ���Ф���ˡ��2�Ĥ���ޤ��� 1�Ĥ���37.7.4�ǽҤ٤�FOR-IN-EXECUTE����Ѥ��뤳�ȤǤ��� �⤦1�Ĥ���37.8.2�ǽҤ٤�OPEN-FOR-EXECUTE�ˤ�륫���������Ѥ��뤳�ȤǤ���

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

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

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

�ʲ���ưŪ�䤤��碌��EXECUTE���礭�����Ǥ���

CREATE FUNCTION cs_update_referrer_type_proc() RETURNS integer AS '
DECLARE
    referrer_keys RECORD;  -- FOR�ǻ��Ѥ�������ѥ쥳���ɤ����
    a_output varchar(4000);
BEGIN 
    a_output := ''CREATE FUNCTION cs_find_referrer_type(varchar, varchar, varchar) 
                  RETURNS varchar AS '''' 
                     DECLARE 
                         v_host ALIAS FOR $1; 
                         v_domain ALIAS FOR $2; 
                         v_url ALIAS FOR $3;
                     BEGIN ''; 

    -- FOR <record> ��ʸ����Ѥ��� FOR �롼�פǡ��䤤��碌�η��
    -- ��ɤΤ褦�˥�����󤷤Ƥ��뤫�����դ��Ʋ�������

    FOR referrer_keys IN SELECT * FROM cs_referrer_keys ORDER BY try_order LOOP
        a_output := a_output || '' IF v_'' || referrer_keys.kind || '' LIKE '''''''''' 
                 || referrer_keys.key_string || '''''''''' THEN RETURN '''''' 
                 || referrer_keys.referrer_type || ''''''; END IF;''; 
    END LOOP; 
  
    a_output := a_output || '' RETURN NULL; END; '''' LANGUAGE plpgsql;''; 
 
    EXECUTE a_output; 
END; 
' LANGUAGE plpgsql;

37.6.5. ��̥��ơ������μ���

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

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

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

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

GET DIAGNOSTICS integer_var = ROW_COUNT;

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

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