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

CREATE FUNCTION

名前

CREATE FUNCTION -- �������ؿ����������

概要

CREATE [ OR REPLACE ] FUNCTION
    name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] )
    [ RETURNS rettype
      | RETURNS TABLE ( column_name column_type [, ...] ) ]
  { LANGUAGE lang_name
    | WINDOW
    | IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
    | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
    | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
    | COST execution_cost
    | ROWS result_rows
    | SET configuration_parameter { TO value | = value | FROM CURRENT }
    | AS 'definition'
    | AS 'obj_file', 'link_symbol'
  } ...
    [ WITH ( attribute [, ...] ) ]

����

CREATE FUNCTION�Ͽ������ؿ���������ޤ��� CREATE OR REPLACE FUNCTION�ϡ��������ؿ��κ������ޤ��ϡ���¸������ִ��Τɤ��餫��Ԥ��ޤ��� �ؿ����������ˤϡ��桼���Ϥ��θ����USAGE���¤�ɬ�פǤ���

��������̾���ޤޤ�Ƥ����硢�ؿ��ϻ��ꤵ�줿�������ޤǺ�������ޤ��� ��������̾���ʤ���С��ؿ��ϸ��ߤΥ������ޤǺ�������ޤ��� Ʊ�������������Ʊ�����ϰ����ǡ���������Ĵ�¸�δؿ���̾���ϡ��������ؿ���̾���Ȥ��ƻ��ѤǤ��ޤ��� ���������ۤʤ�����ǡ���������Ĵؿ��Ǥ���С�̾������ʣ���Ƥ⹽���ޤ��� �ʤ���������С��������ȸ����ޤ��ˡ�

��¸�δؿ�����������ؤ���ˤϡ�CREATE OR REPLACE FUNCTION����Ѥ��Ƥ��������� ������ˡ�Ǥϴؿ���̾��������η����ѹ����뤳�ȤϤǤ��ʤ����Ȥ����դ��Ƥ������� �ʤ����Ԥä���硢�������̤δؿ�����������ޤ��ˡ� �ޤ���CREATE OR REPLACE FUNCTION�Ǥϡ���¸�δؿ�������ͤη����ѹ����뤳�ȤϤǤ��ޤ��� ����ͤη����ѹ����������ϡ����δؿ������������ٺ������Ƥ��������� �ʤ���ϡ�OUT�ѥ�᡼������Ѥ��Ƥ����硢�ؿ��������ʤ��¤�OUT�ѥ�᡼���η����ѹ��Ǥ��ʤ����Ȥ��̣���ޤ�����

CREATE OR REPLACE FUNCTION����Ѥ��ƴ�¸�δؿ����֤��������硢�ؿ��ν�ͭ�Ԥȸ��¤��Ѥ��ޤ��� ¾�δؿ��˴ؤ��뤹�٤Ƥ�°���ˤϡ����Υ��ޥ�ɤǻ��ꤵ�줿�͡��ޤ��ϰ���Ū���ͤ���������ޤ��� �֤������뤿��ˤϤ��δؿ����ͭ���Ƥ��ʤ���Фʤ�ޤ��� �ʤ���ˤϽ�ͭ���������Υ��ФǤ��뤳�Ȥ��ޤޤ�Ƥ��ޤ�����

�ؿ��������ƺ���������硢�������ؿ��ϸŤ���Τ�Ʊ�����ΤˤϤʤ�ޤ��� �Ť��ؿ��򻲾Ȥ��롢��¸�Υ롼�롢�ӥ塼���ȥꥬ�ʤɤ������ʤ���Фʤ�ʤ��Ǥ��礦�� �ؿ��򻲾Ȥ��륪�֥������Ȥ��˲����ʤ��褦�˴ؿ�������ѹ�����ˤϡ�CREATE OR REPLACE FUNCTION����Ѥ��Ƥ��������� �ޤ���ALTER FUNCTION����Ѥ��ơ���¸�δؿ������°���ΤۤȤ�ɤ��ѹ����뤳�Ȥ��Ǥ��ޤ���

�ؿ�����������桼���������δؿ��ν�ͭ�ԤȤʤ�ޤ���

�ؿ���������뤿��ˤϡ����������������ͷ����Ф���USAGE���¤�����ʤ���Фʤ�ޤ���

�ѥ�᡼��

name

��������ؿ���̾���Ǥ��ʥ������޽���̾��ġˡ�

argmode

�����Υ⡼�ɤǡ�IN��OUT��INOUT��VARIADIC�Τ����줫�Ǥ��� ��ά���Υǥե���Ȥ�IN�Ǥ��� OUT�����Τߤ�VARIADIC�򣱤ĸ��³���뤳�Ȥ��Ǥ��ޤ��� �ޤ���RETURNS TABLE��ˡ�Ǥϡ�OUT��INOUT������ξ������Ѥ��뤳�ȤϤǤ��ޤ���

argname

������̾���Ǥ��� �������ˤϤ���̾����ؿ����Τǻ��ѤǤ����Τ⤢��ޤ� �ʺ��ΤȤ���PL/pgSQL�ΤߤǤ��ˡ� ¾�θ���Ǥϡ��ؿ����Τ�Τ����ܤ���¤ꡢ���ϰ�����̾����ñ�ʤ��ɲåɥ�����ȤȤ��ư����ޤ��� �������ؿ��ƤӽФ��������ϰ�����̾������Ѥ��뤳�ȤDz���������뤳�Ȥ��Ǥ��ޤ��� ��項4.3���ȡ� �ɤΤ褦�ʾ��Ǥ��äƤ⡢���ϰ�����̾���ϡ���̤ιԷ�����̾�Ȥʤ�ޤ��Τǽ��פǤ��� �ʽ��ϰ�����̾�����ά������硢�����ƥ�ϥǥե���Ȥ���̾����Ϳ���ޤ�����

argtype

�ؿ��ΰ����Υǡ������Ǥ��ʥ������޽���̾��ġˡ� ���ܥǡ�������ʣ��ǡ��������ɥᥤ�󷿡��ޤ��ϡ��ơ��֥���η��λ��Ȥ���Ѥ��뤳�Ȥ��Ǥ��ޤ���

�ޤ�������μ����˰�¸���ޤ�����cstring�Ȥ��ä�"������"�����Ǥ�����⤢��ޤ��� �������ϡ������η��λ��꤬�Դ����Ǥ��롢�⤷���ϡ��̾��SQL�ǡ������ν����ۤ��Ƥ��뤳�Ȥ򼨤��ޤ���

��η��򻲾Ȥ���ˤϡ�table_name.column_name%TYPE�ȵ��Ҥ��ޤ��� �������Ѥ���ȡ��ơ��֥�������ѹ�����Ƥ�ؿ����ƶ�������ʤ��褦�ˤ���Τ����Ω�Ĥ��Ȥ�����ޤ���

default_expr

�ѥ�᡼�������ꤵ��ʤ��ä����Υǥե�����ͤȤ��ƻ��Ѥ���뼰�Ǥ��� ���μ��ϥѥ�᡼���ΰ������ȷ�����������ʤ���Фʤ�ޤ��� ���ϥѥ�᡼����INOUT��ޤߤޤ��ˤΤߤ��ǥե�����ͤ���Ĥ��Ȥ��Ǥ��ޤ��� �ǥե�����ͤ���ĥѥ�᡼���θ���ˤ���ѥ�᡼���Ϥ��٤ơ�Ʊ�ͤ˥ǥե�����ͤ���ĥѥ�᡼���Ǥʤ���Фʤ�ޤ���

rettype

�ؿ����֤��ǡ����η��Ǥ��ʥ������޽���̾��ġˡ� ���ܷ���ʣ�緿���ɥᥤ�󷿡��ޤ��ϡ��ơ��֥���η��λ��Ȥ����ꤹ�뤳�Ȥ��Ǥ��ޤ��� �ޤ����������Ƥ������ˤ��ޤ�����cstring�Τ褦��"������"����ꤹ�뤳�Ȥ���ǽ�Ǥ��� ���δؿ����ͤ��֤����Ȥ����ꤷ�Ƥ��ʤ����ϡ�����ͤȤ���void����ꤷ�Ƥ���������

OUT�⤷����INOUT�ѥ�᡼����¸�ߤ����硢RETURNS����ά���뤳�Ȥ��Ǥ��ޤ��� ��ά���ʤ����ϡ������ѥѥ�᡼������̣�����̷��˽��ä���Ρ��Ĥޤꡢʣ���ν����ѥѥ�᡼���������RECORD��ñ��ν����ѥѥ�᡼���Ǥ���Ф����Ʊ�������Ǥʤ���Фʤ�ޤ���

SETOF�����Ҥϡ����δؿ�����1�ĤǤϤʤ�ʣ���Υ����ƥ�ν�����֤����Ȥ򼨤��ޤ���

��η��ϡ�table_name.column_name%TYPE�ȵ��Ҥ��뤳�Ȥǻ��Ȥ���ޤ���

column_name

RETURNS TABLE��ʸ�ˤ�����������̾���Ǥ��� ����ϼº�̾���դ����줿OUT�ѥ�᡼������������̤���ˡ�Ǥ�����RETURNS TABLE��RETURNS SETOF����̣���������ۤʤ�ޤ���

column_type

RETURNS TABLE��ʸ�ˤ����������Υǡ������Ǥ���

lang_name

�ؿ���������Ƥ�������̾���Ǥ��� ���Υѥ�᡼���ˤϡ�SQL��C��internal���⤷���ϥ桼�������³�������̾��������ǽ�Ǥ��� �����ߴ����ݻ����뤿�ᡢ����̾����ñ�������ǰϤळ�Ȥ�Ǥ��ޤ���

WINDOW

WINDOW�ϡ����δؿ������̤δؿ��ǤϤʤ�������ɥ��ؿ��Ǥ��뤳�Ȥ򼨤��ޤ��� ���ߤ����C����Ǻ��������ؿ��Τߤ˻��Ѥ��뤳�Ȥ��Ǥ��ޤ��� ��¸�δؿ�������֤��������硢WINDOW°�����ѹ����뤳�ȤϤǤ��ޤ���

IMMUTABLE
STABLE
VOLATILE

������°���ϡ��ؿ���ư��˴ؤ��������䤤��碌���ץƥ��ޥ������󶡤��ޤ��� �����줫1�ĤΥ�����ɤΤ߻���Ǥ��ޤ��� ���꤬�ʤ����ϡ��ǥե���Ȥ�VOLATILE�Ȳ�ᤵ��ޤ���

IMMUTABLE�ϡ��ǡ����١������Ф����ѹ���Ԥ�ʤ����ȡ�����ӡ����δؿ���Ʊ�������ͤ�Ϳ�������˾��Ʊ����̤��֤����Ȥ򼨤��ޤ��� ����ϡ��ǡ����١����򸡺������ꡢ�����ꥹ�����ľ��¸�ߤ��ʤ��������Ѥ����ꤷ�ʤ��Ȥ������ȤǤ��� ���Υ��ץ���󤬻��ꤵ�줿��硢��������������Ǥ���ؿ��ƤӽФ��ϡ�¨�¤˴ؿ��ͤ��֤������뤳�Ȥ��Ǥ��ޤ���

STABLE�ϡ��ǡ����١������Ф����ѹ���Ԥ�ʤ����ȡ�����ӡ����δؿ���Ʊ�������ͤ�Ϳ������硢1�ơ��֥륹�������Ǿ��Ʊ����̤��֤����� SQLʸ���ۤʤ�ȷ�̤��Ѥ�äƤ��ޤ���ǽ�������뤳�Ȥ򼨤��ޤ��� ����ϡ��ǡ����١���������ʸ��ߤλ����ӤΤ褦�ʡ˥ѥ�᡼���ѿ��ʤɤ˷�̤���¸����ؿ���Ŭ���ޤ��� (����ϸ��ߤΥ��ޥ�ɤ��ѹ����줿�Ԥ��䤤��碌����AFTER�ȥꥬ�Ǥ���Ŭ�ڤǤ���) �ޤ���current_timestamp�Ϥδؿ��ϡ�1�ĤΥȥ�󥶥��������Ǥ��ͤ��Ѳ����ʤ����ᡢSTABLE�Ǥ��뤳�Ȥ����դ��Ƥ���������

VOLATILE�ϡ�1�ơ��֥륹�������ˤ����ƴؿ����ͤ��Ѳ������ǽ�������뤿�ᡢ��Ŭ���Ǥ��ʤ����Ȥ򼨤��ޤ��� ���Τ褦�ʰ�̣����ưŪ��volatile�ˤʥǡ����١����ؿ��ϡ����Ū�����Ǥ��� �㤨�С�random()��currval()��timeofday()�ʤɤ���ưŪ�ʴؿ��Ǥ��� ���������㤨��setval()�ʤɤ������Ѥ�����ؿ��ϡ����η�̤�����ͽ¬�Ǥ���Ȥ��Ƥ⡢�ƤӽФ����Ŭ�����ʤ��褦��VOLATILE����ưŪ�ˤ�ʬ�ह��ɬ�פ����뤳�Ȥ����դ��Ƥ���������

�ܺ٤�項35.6�򻲾Ȥ��Ƥ���������

LEAKPROOF

LEAKPROOF�ϡ��ؿ��������Ѥ�����ʤ����Ȥ򼨤��ޤ��� ���ΰ����˴ؤ�����������Ͱʳ���ϳ�餷�ޤ��� �㤨�С����������ΰ����ͤ˴ؤ��륨�顼��å��������֤��ؿ��䲿�餫�Υ��顼��å���������˰������ͤ�ޤ��ؿ���ϳ���ɻߤȤϤ����ޤ��� �䤤��碌�ץ��ʤϡ�security_barrier���ץ�����դ��Ǻ������줿�ӥ塼��ϳ���ɻߴؿ��򲡤����ߤޤ��� CREATE VIEW�����項37.4�򻲾Ȥ��Ƥ��������� ���Υ��ץ����ϥ����ѡ��桼���ˤ�äƤΤ����ꤹ�뤳�Ȥ��Ǥ��ޤ���

CALLED ON NULL INPUT
RETURNS NULL ON NULL INPUT
STRICT

CALLED ON NULL INPUT�ʥǥե���ȡˤ���ꤹ��ȡ�������NULL���ޤޤ�Ƥ��Ƥ⡢�ؿ����̾��̤�ƤӽФ���ޤ��� ���ξ��ϡ�ɬ�פ˱�����NULL�ͤ��ǧ����Ŭ�ڤ��б��򤹤뤳�Ȥϴؿ������Ԥ���Ǥ�Ǥ���

RETURNS NULL ON NULL INPUT�⤷����STRICT����ꤹ��ȡ��ؿ��ΰ�����NULL�������硢���NULL���֤��ޤ��� ���Υѥ�᡼�������ꤵ���ȡ�NULL�����������硢�ؿ��ϼ¹Ԥ���ޤ��� ����ˡ�NULL�Ȥ�����̤���ưŪ��Ϳ�����ޤ���

[EXTERNAL] SECURITY INVOKER
[EXTERNAL] SECURITY DEFINER

SECURITY INVOKER����ꤹ��ȡ��ؿ���ƤӽФ����桼���θ��¤ǡ����δؿ����¹Ԥ���ޤ��� ���줬�ǥե���ȤǤ��� SECURITY DEFINER����ꤹ��ȡ��ؿ�����������桼���θ��¤ǡ����δؿ����¹Ԥ���ޤ���

EXTERNAL������ɤϡ�SQL�Ȥθߴ������ݤĤ���˵�����Ƥ��ޤ��� ��������SQL�Ȥϰۤʤꡢ���ε�ǽ�ϳ����ؿ��ˤΤ�Ŭ�Ѥ����櫓�ǤϤʤ����ᡢ���Υ�����ɤϾ�ά��ǽ�Ǥ���

execution_cost

���δؿ��ο���¹ԥ����Ȥ�ɽ�������ǡ�ñ�̤�cpu_operator_cost�Ǥ��� �ؿ���������֤���硢�����1��������Υ����ȤȤʤ�ޤ��� ���Υ����Ȥ����ꤵ��ʤ���硢C���줪��������ؿ��Ǥ�1��¾�Τ��٤Ƥθ���Ǥ�100�Ȥʤ�ޤ��� �ͤ����礭������ȡ��ץ��ʤ�ɬ�װʾ�����ˤ˴ؿ���ɾ�����ʤ��褦�ˤʤ�ޤ���

result_rows

�ץ��ʤ����ꤹ�롢���δؿ����֤��Կ��ο����ͤ�ɽ�������Ǥ��� ����ϡ��ؿ���������֤���Τ�������줿���Τߵ�����ޤ��� �ǥե���ȿ����ͤ�1000�ԤǤ���

configuration_parameter
value

SET��ˤ�ꡢ�ؿ����Ϥޤä����˻��ꤷ������ѥ�᡼������ꤷ���ͤ����ꤷ���ؿ��ν�λ���ˤ����������ͤ��᤹���Ȥ��Ǥ��ޤ��� SET FROM CURRENT�ϡ����å����ˤ�����ѥ�᡼���θ����ͤ�ؿ����Ϥޤä�����Ŭ�Ѥ����ͤȤ����ݴɤ��ޤ���

�ؿ���SET�礬�դ��Ƥ����硢�ؿ������Ǽ¹Ԥ����SET LOCAL���ޥ�ɤ�Ʊ���ѿ����Ф�����̤Ϥ��δؿ������¤���ޤ��� ����ѥ�᡼���������ͤϴؿ�����λ������˸������ޤ��� ���������̾�Ρ�LOCAL���ʤ���SET���ޥ�ɤ�SET����񤭤��ޤ��� ����ϲ��˹Ԥ�줿SET LOCAL���ޥ�ɤ��Ф��Ƥ�ۤ�Ʊ���Ǥ��� ���Υ��ޥ�ɤθ��̤ϡ����ߤΥȥ�󥶥�����󤬥�����Хå�����ʤ��¤ꡢ�ؿ�����λ��������³������ޤ���

���Ѳ�ǽ�ʥѥ�᡼�����ͤˤĤ��Ƥϡ�SET�����第18章�򻲾Ȥ��Ƥ���������

definition

�ؿ����������ʸ��������Ǥ��� ���Υѥ�᡼���ΰ�̣�ϸ���˰�¸���ޤ��� ����Ū�ʴؿ�̾�����֥������ȥե�����ؤΥѥ���SQL���ޥ�ɡ���³������ǵ��Ҥ��줿�ƥ����Ȥʤɤ����Ǥ��ޤ���

�ؿ����������ʸ����򵭽Ҥ���ݤˡ��̾��ñ�������ǤϤʤ����ɥ�������項4.1.2.4���ȡˤ���Ѥ���������ʤ��Ȥ�¿������ޤ��� �ɥ���������Ѥ��ʤ��¤ꡢ�ؿ�������ñ��������Хå�����å����ɬ����Ťˤ��ƥ��������פ��ʤ���Фʤ�ޤ���

obj_file, link_symbol

���ι�ʸ��AS��ϡ�C����Υ�������������δؿ�̾��SQL�ؿ���̾����Ʊ���Ǥʤ���硢ưŪ�˥����ɤ����C����ؿ��˻Ȥ��ޤ��� obj_file�Ȥ���ʸ�����ưŪ�˥����ɤǤ��륪�֥������Ȥ�ޤ�ե������̾���ǡ�link_symbol�Ϥ��Υ��֥������ȤΥ�󥯥���ܥ롢�ĤޤꡢC���쥽������������δؿ���̾���Ǥ��� ��󥯥���ܥ뤬��ά���줿��硢��������SQL�ؿ���̾����Ʊ����ΤǤ���Ȳ��ꤵ��ޤ���

Ʊ�쥪�֥������ȥե�����򻲾Ȥ��롢CREATE FUNCTION�ƤӽФ��������֤��줿��硢���Υե�����ϥ��å������˰��٤��������ɤ���ޤ��� �ʤ����餯��ȯ�ʳ��ǡ˥ե�����򥢥�����ɤ��ƥ����ɤ���ˤϡ����������å����򳫻Ϥ��Ƥ���������

attribute

�ؿ��˴ؤ���������ʬŪ�����򤷤ƻ��ꤹ������Ū����ˡ�Ǥ��� �����ǻ���Ǥ���°����ʲ��˼����ޤ���

isStrict

STRICT�ޤ���RETURNS NULL ON NULL INPUT��Ʊ���Ǥ���

isCachable

isCachable�ϡ�IMMUTABLE��Ʊ���Ǥ����������ѻߤ���Ƥ��ޤ��� �������������ߴ������ݻ����뤿�ᡢ�ޤ�ͭ���Ȥ���Ƥ��ޤ���

°��̾�Ǥϡ���ʸ����ʸ������̤��ޤ���

����˾ܤ��������ؿ��κ�����ˡ�ˤĤ��Ƥ�項35.3�򻲾Ȥ��Ƥ���������

������������

PostgreSQL�ϴؿ��������С�����������Ĥ��ޤ��� �Ĥޤꡢ���ϰ����η����ۤʤäƤ���С�ʣ���δؿ���Ʊ��̾������Ѥ��뤳�Ȥ��Ǥ��ޤ��� �����������Ƥδؿ���C����ˤ�����̾���ϡ���ʣ���ƤϤ����ޤ��� �������äơ������С������ɤ���C����ؿ��ˤϡ��ۤʤ�C�����̾����Ϳ����ɬ�פ�����ޤ� ���㤨�С�C����ˤ�����̾���ΰ����˰����η�����Ѥ��Ƥ��������ˡ�

Ʊ��̾����Ʊ���������ѥ�᡼��������ľ�硢2�Ĥδؿ���Ʊ��Ǥ���Ȥߤʤ���ޤ��� OUT�ѥ�᡼����̵�뤵��ޤ��� �������äơ��㤨�аʲ�������϶��礷�Ƥ��ޤ���

CREATE FUNCTION foo(int) ...
CREATE FUNCTION foo(int, out text) ...

�ۤʤ�������Υꥹ�Ȥ���Ĵؿ��ϡ��������˶��礹��ȤϤߤʤ���ޤ��󤬡��ǥե�����ͤ����ꤵ�줿�����ѻ��˶��礹���ǽ��������ޤ��� �㤨�аʲ���ͤ��Ƥߤޤ��礦��

CREATE FUNCTION foo(int) ...
CREATE FUNCTION foo(int, int default 42) ...

foo(10)�Ȥ����ƤӽФ��ϡ��ɤ���δؿ���ƤӽФ��٤����˴ؤ���ۣ�椵�����뤿��˼��Ԥ��ޤ���

����

������SQL���ι�ʸ�ˤ�����ϰ���������ͤ�������ޤ��� �������������η�����κ���(�㤨��numeric�������٥ե������)�ϡ��ظ�δؿ��μ�������Ǥ�����ꡢCREATE FUNCTION���ޥ�ɤˤ��ٹ�ʤ����߹��ޤ�Ƥ��ޤ��ޤ�(�Ĥޤ�ǧ���⶯���⤵��ޤ���)��

��¸�δؿ���CREATE OR REPLACE FUNCTION��Ȥä��֤��������硢�ѥ�᡼��̾���ѹ��˴ؤ������¤�����ޤ��� ���Ǥ˲��餫�����ϥѥ�᡼���˳�����Ƥ�줿̾�����ѹ����뤳�ȤϤǤ��ޤ��� �ʤ�����������ޤ�̾��������ʤ��ä��ѥ�᡼����̾�����ɲä��뤳�Ȥϲ�ǽ�Ǥ����� ʣ���ν��ϥѥ�᡼����¸�ߤ����硢�ؿ��η�̤�ɽ�魯̵̾ʣ�緿����̾���ѹ����뤳�Ȥˤʤ뤿�ᡢ���ϥѥ�᡼����̾�����ѹ����뤳�ȤϤǤ��ޤ��� ��¸�δؿ��ƤӽФ����֤�����ä�����ư��ʤ��ʤ뤳�Ȥ�μ¤��ɤ�����ˡ����������¤��ʤ���Ƥ��ޤ���

�ؿ���VARIADIC���������STRICT��������줿��硢���θ�̩�������Ǥϡ�����Ĺ������������NULL���ɤ����򸡺����ޤ��� ����NULL���Ǥ���äƤ����Ȥ��Ƥ�ؿ��ϸƤӽФ���ޤ���

��

�����Ǥϡ��鿴�Ը����δ�ñ����򤤤��Ĥ������ޤ��� 項35.3�ˤϡ����¿���ξ�����㤬���ܤ���Ƥ��ޤ���

CREATE FUNCTION add(integer, integer) RETURNS integer
    AS 'select $1 + $2;'
    LANGUAGE SQL
    IMMUTABLE
    RETURNS NULL ON NULL INPUT;

PL/pgSQL�ǡ�����̾����Ѥ��ơ�������1���䤷�ޤ���

CREATE OR REPLACE FUNCTION increment(i integer) RETURNS integer AS $$
        BEGIN
                RETURN i + 1;
        END;
$$ LANGUAGE plpgsql;

ʣ���ν����ѥѥ�᡼������ĥ쥳���ɤ��֤��ޤ���

CREATE FUNCTION dup(in int, out f1 int, out f2 text)
    AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$
    LANGUAGE SQL;

SELECT * FROM dup(42);

���Ʊ�����Ȥ�����Ū��̾�����դ���ʣ�緿����Ѥ��ơ�����Ĺ�˹Ԥ����Ȥ��Ǥ��ޤ���

CREATE TYPE dup_result AS (f1 int, f2 text);

CREATE FUNCTION dup(int) RETURNS dup_result
    AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$
    LANGUAGE SQL;

SELECT * FROM dup(42);

ʣ������֤��̤���ˡ�ϡ�TABLE�ؿ�����Ѥ��뤳�ȤǤ���

CREATE FUNCTION dup(int) RETURNS TABLE(f1 int, f2 text)
    AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$
    LANGUAGE SQL;

SELECT * FROM dup(42);

������������ϼºݤˤϡ�1�ĤΥ쥳���ɤǤϤʤ����쥳���ɤ��������֤��ޤ��Τǡ�TABLE�ؿ��Ͼ����Ȥϰۤʤ�ޤ���

SECURITY DEFINER�ؿ��ΰ����ʺ���

SECURITY DEFINER�ؿ��ϴؿ�����������桼���θ��¤Ǽ¹Ԥ���ޤ��Τǡ����δؿ���ְ�äƻ��ѤǤ��ʤ����Ȥ�μ¤ˤ��ʤ���Фʤ�ޤ��� �����塢search_path�ϡ�����Ǥ��ʤ��桼�����񤭹��߲�ǽ�ʥ������ޤ������������ꤵ��ޤ��� ����ϡ����դΤ���桼�������δؿ��ǻ��Ѥ���륪�֥������Ȥ򱣤��褦�ʥ��֥������Ȥ�������뤳�Ȥ��ɤ��ޤ��� �������ä˽��פʤ��Ȥϡ�����ơ��֥륹�����ޤǤ��� ���Υ������ޤϥǥե���ȤǺǽ�˸������졢�����ơ��̾�ï�Ǥ�񤭹��߲�ǽ�Ǥ��� ����������ޤθ�������Ū�˺Ǹ�ˤ��뤳�Ȥǡ��������ƥ���Ĵ���Ǥ��ޤ��� ���Τ���ˤϡ�pg_temp��search_path�κǸ�ι��ܤȤ��Ƶ��ܤ��Ƥ��������� ���δؿ��ΰ����ʻ�����ˡ��ʲ��˼����ޤ���

CREATE FUNCTION check_password(uname TEXT, pass TEXT)
RETURNS BOOLEAN AS $$
DECLARE passed BOOLEAN;
BEGIN
        SELECT  (pwd = $2) INTO passed
        FROM    pwds
        WHERE   username = $1;

        RETURN passed;
END;
$$  LANGUAGE plpgsql
    SECURITY DEFINER
    -- ����Ǥ��륹�����ޡ����θ��pg_temp�Ȥ������search_path����������ꤷ�ޤ���
    SET search_path = admin, pg_temp;

PostgreSQL�С������8.3������Ǥϡ�SET���ץ��������ѤǤ��ޤ��� ���Τ���Ť��ؿ��ˤϡ�search_path���ݴɤ������ꡢ�����Ƹ����᤹�Ȥ�����¿��ʣ���ʥ����å����ޤޤ�Ƥ��뤫�⤷��ޤ��� ����������Ū��SET���ץ�������Ѥ���ȡ����ʤ��ñ�ˤʤ�ޤ���

����¾�����դ��٤����Ȥ��ơ��������������줿�ؿ��Ǥϥǥե���ȤǼ¹Ը��¤�PUBLIC����Ϳ����Ƥ��뤳�Ȥ�����ޤ��� �ʾܺ٤�GRANT�򻲾Ȥ��Ƥ����������� SECURITY DEFINER�ؿ��λ��Ѥ�����Υ桼���Τߤ����¤��������ȤϤ褯����ޤ��� ���Τ���ˤϡ��ǥե���Ȥ�PUBLIC���¤���夲�������ơ��¹Ը��¤���Ϳ�����򤷤ƹԤäƤ��������� �������ؿ������٤ƤΥ桼���˼¹Բ�ǽ�Ȥʤ��֤�¸�ߤ��뤳�Ȥ��ɤ�����ˤϡ�ñ��ȥ�󥶥��������Ǻ����ȸ��������ԤäƤ��������� �ʲ�����򼨤��ޤ���

BEGIN;
CREATE FUNCTION check_password(uname TEXT, pass TEXT) ... SECURITY DEFINER;
REVOKE ALL ON FUNCTION check_password(uname TEXT, pass TEXT) FROM PUBLIC;
GRANT EXECUTE ON FUNCTION check_password(uname TEXT, pass TEXT) TO admins;
COMMIT;

�ߴ���

CREATE FUNCTION���ޥ�ɤ�SQL:1999�ʹߤ��������Ƥ��ޤ��� PostgreSQL�ˤ�����CREATE FUNCTION������ε�ǽ������ޤ����������ʸߴ����Ϥ���ޤ��� °���ˤϰܿ���������ޤ��󡣤ޤ������Ѳ�ǽ�ʸ����ۤʤ�ޤ���

¾�Υǡ����١��������ƥ�Ȥθߴ����Τ���ˡ�argmode��argname�����˽񤯤��Ȥ��˽񤯤��Ȥ�Ǥ��ޤ��� ��������1���ܤ���ˡ��ɸ��˽��äƤ��ޤ���

ɸ��SQL�ϥѥ�᡼���Υǥե���Ȥ��ꤷ�Ƥ��ޤ��� DEFAULT������ɤ���Ĺ�ʸ��Oracle��ͳ�褷����Τǡ�ɸ���ή���¿��������ΤǤ��� SQL/PSM�ǤϤ�����ѿ��Υǥե�����ͤȤ��ƻ��Ѥ��Ƥ��ޤ��� =����Ĺ�ʸ��T-SQL�����Firebird�ǻ��Ѥ���Ƥ��ޤ���

��Ϣ����

ALTER FUNCTION, DROP FUNCTION, GRANT, LOAD, REVOKE, createlang