���ᤪ��Ӽ���Ǥϡ�����Ū��PL/pgSQL�Dz�ᤵ��롢���Ƥμ����ʸ�ˤĤ����������ޤ��� �����μ����ʸ�Ȥ���ǧ����ʤ���Τ����ơ�SQL���ޥ�ɤǤ���Ȳ��ꤵ�졢項38.5.2�����項38.5.3�ˤ����Ƶ��Ҥ����褦�ˡ��ᥤ��ǡ����١����������������¹Ԥ���ޤ���
�ͤ�PL/pgSQL�ѿ����⤷���Ϲ�/�쥳���ɥե�����ɤ�����������ϰʲ��Τ褦�˵��Ҥ��ޤ���
variable := expression;
��Ҥ����̤ꡢ���Τ褦��ʸ��ˤ��뼰�ϡ��ᥤ��ǡ����١�����������������SELECT SQL���ޥ�ɤˤ�ä�ɾ������ޤ��� ����1�Ĥ��ͤ��������ʤ���Фʤ�ޤ���
���η�̥ǡ��������ѿ��Υǡ������˰��פ��ʤ���硢�ޤ��ϡ��ѿ�����char(20)�Τ褦�ˡ�������礭��/���٤���ľ�硢��̤��ͤ� PL/pgSQL���ץ�ˤ�äơ���̤η��ν��ϴؿ����ѿ��η������ϴؿ�����Ѥ��ư���Ū���Ѵ�����ޤ��� ����ˤ�ꡢ����ͤ�ʸ������������ϴؿ��Ǽ����դ��뤳�Ȥ��Ǥ��ʤ����ˡ����ϴؿ��ˤ����Ƽ¹Ի����顼��ȯ�������ǽ�������뤳�Ȥ����դ��Ƥ���������
�㡧
tax := subtotal * 0.06; my_record.user_id := 20;
�㤨�С�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);
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�Ȥ��Ƥ���������
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���ޥ�ɤ��Ѥ��Ƽ¹Ԥ����ΤǤ���
���ޥ�ɤθ��̤�Ƚ�Ǥ���ˤϡ������Ĥ���ˡ������ޤ��� �ǽ����ˡ�ϡ��ʲ��Τ褦�ʷ�����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�Ϻǽ�ϵ������ꤵ��Ƥ��ޤ��� �ʲ��Τ褦�ˡ����줾���ʸ�μ���ˤ�ä����꤬�ѹ�����ޤ���
SELECT INTOʸ�ϡ��Ԥ��������줿���Ͽ����֤���ʤ��ä����ϵ���FOUND�����ꤷ�ޤ���
PERFORMʸ�ϡ��Ԥ��������˴��ˤ��줿���Ͽ�����������ʤ��ä����ϵ���FOUND�����ꤷ�ޤ���
UPDATE��INSERT�������DELETEʸ�ϡ����ʤ��Ȥ�1�Ԥ��ƶ�����������Ͽ����ޤä����ƶ�������ʤ��ä����ϵ���FOUND�����ꤷ�ޤ���
FETCHʸ�ϡ��Ԥ��֤��줿���Ͽ����ޤä����֤���ʤ��ä����ϵ���FOUND�����ꤷ�ޤ���
MOVEʸ�ϡ���������ΰ�ư���������������Ͽ������Ԥ������ϵ���FOUND�����ꤷ�ޤ���
FORʸ��1��ʾ巫���֤����Ԥ�줿���Ͽ����Ԥ��ʤ��ä����ϵ���FOUND�����ꤷ�ޤ��� �����3���FORʸ���ơ�����FOR�롼�ס��쥳���ɥ��å�FOR�롼�ס�ưŪ�쥳���ɥ��å�FOR�롼�סˤ����ƤϤޤ�ޤ��� FOUND��FOR�롼�פ���λ�����ݡ����Τ褦�����ꤵ��ޤ��� �Ĥޤꡢ�¹ԥ롼����Ǥ�FORʸ�ˤ�ä�FOUND���ѹ�����ޤ��� ���������롼���������¾�����ʸ��¹Ԥ��뤳�Ȥˤ�äơ��ѹ�����뤫�⤷��ޤ���
FOUND�ϳơ���PL/pgSQL�ؿ������Υ��������ѿ��Ǥ��� FOUND���Ф��ƹԤ�줿���Ƥ��ѹ��ϡ����ߤδؿ��ˤΤ߱ƶ����ޤ���
���⤷�ʤ��ץ졼���ۥ��ʸ��ͭ�Ѥˤʤ뤳�Ȥ�����ޤ��� �㤨�С�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�Ǥϡ�̵���Ҥ�ʸ�����Ĥ���Ƥ��ޤ���