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

Name

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

Synopsis

CREATE [ OR REPLACE ] FUNCTION name ( [ argtype [, ...] ] )
    RETURNS rettype
  { LANGUAGE langname
    | IMMUTABLE | STABLE | VOLATILE
    | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
    | [EXTERNAL] SECURITY INVOKER | [EXTERNAL] SECURITY DEFINER
    | AS 'definition'
    | AS 'obj_file', 'link_symbol'
  } ...
    [ WITH ( attribute [, ...] ) ]

����

CREATE FUNCTION �Ͽ������ؿ���������ޤ���CREATE OR REPLACE FUNCTION �ϡ��������ؿ��κ������ޤ��ϡ���¸������ִ��Τɤ��餫��Ԥʤ��ޤ���

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

�ѥ�᡼��

name

��������ؿ���̾���Ǥ��� ��������̾���ޤޤ�Ƥ����硢�ؿ��ϻ��ꤵ�줿�������ޤǺ�������ޤ��� ��������̾���ʤ���С��ؿ��ϸ��ߤΥ������� (�����ѥ������ˤ��륹�����ޡ�CURRENT_SCHEMA() ����) �Ǻ�������ޤ��� �������ؿ���̾���ˤϡ�Ʊ�������������Ʊ�������ǡ���������Ĵ�¸�δؿ���Ʊ��̾���ϻ��ѤǤ��ޤ��� ���������ۤʤ�����ǡ���������Ĵؿ��Ǥ���С�Ʊ��̾���Ǥ⹽���ޤ��� (����������С������� �ȸ����ޤ�)��

argtype

�⤷����С��ؿ��ΰ����Υǡ������Ǥ��� ���Ϸ��ˤϡ����ܷ���ʣ�緿���ɥᥤ�󷿡��⤷���ϴ�¸����η���Ʊ��������Ѥ��뤳�Ȥ��Ǥ��ޤ��� ��η��򻲾Ȥ���ˤϡ�tablename.columnname%TYPE �ȵ��Ҥ��ޤ������η�����Ѥ���ȡ��ơ��֥�������ѹ�����Ƥ�ؿ����ƶ�������ʤ��褦�ˤ��뤳�Ȥ��Ǥ����礬����ޤ��� �ޤ����������Ƥ������ˤ�ꡢcstring �Τ褦�ʡֵ����ǡ������פ���ꤹ�뤳�Ȥ���ǽ�Ǥ��� �����ǡ����������Ѥ���Ƥ����硢�ºݤΰ����Υǡ������ϡ����꤬�Դ����Ǥ��뤫���⤷�����̾�� SQL �ǡ������Υ��åȤǤϤʤ��ǡ������Ǥ���

rettype

�֤����ǡ������Ǥ��� �֤����ǡ������ϡ����ܷ���ʣ�緿���ɥᥤ�󷿡��⤷���ϴ�¸����η���Ʊ���������ꤹ�뤳�Ȥ��Ǥ��ޤ��� �ޤ����������Ƥ������ˤ�ꡢcstring �Τ褦�ʡֵ����ǡ������פ���ꤹ�뤳�Ȥ���ǽ�Ǥ���setof �����ҤϤ��δؿ�����1 �ĤΥ����ƥ�ǤϤʤ������ƥ�ν�����֤����Ȥ򼨤��ޤ���

langname

�ؿ���������Ƥ�������̾���Ǥ��� ���Υѥ�᡼���ˤϡ�SQL��C��internal���⤷���ϥ桼�������³�������̾��������ǽ�Ǥ��� (createlang �⻲�Ȥ��Ƥ���������)�����ߴ��Τ��ᡢ����̾����ñ�������dz�뤳�Ȥ�Ǥ��ޤ���

IMMUTABLE
STABLE
VOLATILE

�嵭��°������ꤹ��ȡ��¹Ի��κ�Ŭ���Τ��ᡢ�ؿ���ʣ����ɾ���� 1 �Ĥ�ɾ�����֤������Ƥ�����ʤ����ɤ����Ȥ�������򡢥����ƥ���󶡤��뤳�Ȥ��Ǥ��ޤ��� ���ꤹ��Τϡ������줫 1 �ĤΤߤǤ��� ���꤬�ʤ����ϡ�VOLATILE ���ǥե���Ȳ��Ǥ���

IMMUTABLE ����ꤹ��ȡ����δؿ���Ʊ�������ͤ�Ϳ������硢���Ʊ����̤��֤��ޤ����Ĥޤꡢ�ǡ����١����򸡺������ꡢ���ΰ����ꥹ�����¸�ߤ�������ľ�ܻ��Ѥ�����Ϥ��ޤ��� ���Υ��ץ���󤬻��ꤵ�줿��硢����������Ǥ���ؿ����ƤӽФ����Ȥ������ؿ��ͤ��֤������뤳�Ȥ��Ǥ��ޤ���

STABLE ����ꤹ��ȡ����δؿ���Ʊ�������ͤ�Ϳ����줿��硢1 �ơ��֥륹�������Ǿ��Ʊ����̤��֤����Ȥ��Ǥ��ޤ��������������η�̤ϡ�SQL ʸ���ۤʤ���Ѥ�äƤ��ޤ���ǽ��������ޤ��� ����ϡ��ؿ��η�̤����ǡ����١��������� (���ߤΥ����ॾ����Τ褦��) �ѥ�᡼���ѿ��ʤɤ˰�¸����ؿ��ˤ�����Ŭ�ڤ�����Ȥ����ޤ��� �ޤ����ؿ��� CURRENT_TIMESTAMP �ե��ߥ꡼�ϡ������ͤ��ȥ�󥶥����������ѹ�����ʤ����ᡢSTABLE �Ǥ��뤳�Ȥ����դ��Ƥ���������

VOLATILE ����ꤹ��ȡ�1 �ơ��֥륹�������Ǥ⤽�δؿ����ͤ��ѹ����뤳�Ȥ���ǽ�ˤʤ�ޤ����������äơ���Ŭ����Ԥʤ����ȤϤǤ��ޤ��� ���Τ褦�ʰ�̣�Ǵ�ȯŪ (volatile) �ʥǡ����١����ؿ��ϡ����Ū�����Ǥ������Ȥ��С�random()��currval()��timeofday() �ʤɤǤ��� �ޤ��������Ѥ�����ؿ� (���Ȥ��� setval()) �ϡ����η�̤�����ͽ¬�Ǥ���Ȥ��Ƥ⡢�ƤӽФ����Ŭ�����ʤ��褦����ȯŪ��ʬ�ह��ɬ�פ����뤳�Ȥ����դ��Ƥ���������

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 �Ȥϰۤʤꡢ���ε�ǽ�ϳ����ؿ��ˤΤ�Ŭ�Ѥ����櫓�ǤϤʤ����ᡢ���Υ�����ɤϥ��ץ����Ǥ���

definition

�ؿ����������ʸ����Ǥ��� ���ΰ�̣�ϸ���˰�¸���ޤ�������Ū�ʴؿ�̾�����֥������ȥե�����ؤΥѥ���SQL�䤤��碌����³������ǽ񤫤줿�ƥ����Ȥʤɤ����Ǥ��ޤ���

obj_file, link_symbol

���η�����AS��ϡ�C����Υ�������������δؿ�̾��SQL�ؿ���̾����Ʊ���Ǥʤ���硢ưŪ�˥�󥯤��줿C����ؿ��˻Ȥ��ޤ���ʸ����obj_file��ưŪ�˥����ɤǤ��륪�֥������Ȥ�ޤ�ե������̾���ǡ�link_symbol��C���쥽������������δؿ���̾���Ǥ��륪�֥������ȤΥ�󥯥���ܥ�Ǥ���

attribute

�ؿ��˴ؤ���������ʬŪ�����򤷤ƻ��ꤹ������Ū����ˡ�Ǥ��� �����Ǵ�Ϣ����Τϡ��ʲ���°���Ǥ���

isStrict

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

isCachable

isCachable �ϡ�IMMUTABLE ��Ʊ���Ǥ��������Ǥ��ѻߤ���Ƥ��ޤ��������������̸ߴ����Τ��ᡢ�ޤ������դ��뤳�ȤϤǤ��ޤ���

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

����

����˾ܤ��������ؿ��ν����ˤĤ��Ƥ� PostgreSQL �ץ�����ޥ������Ρ��ؿ���Ȥä� PostgreSQL �γ�ĥ�˴ؤ���Ϥ򻲾Ȥ��Ƥ���������

���٤Ƥ�SQL�η��ι�ʸ�����ϰ������֤��ͤ�ǧ����Ƥ��ޤ�����������������Τ����Ĥ��κ����ʤ��Ȥ���numeric�������٥ե�����ɡˤϡ����δؿ��μ����λ�������Ǥ�����ꡢCREATE FUNCTION ���ޥ�ɤˤ�äƷٹ�ʤ���ޤ���ޤ��ʤĤޤ�ǧ���䶯���Ϥ���ޤ���ˡ�

PostgreSQL�ϴؿ��������С�����������Ĥ��ޤ��� ����ϡ��ۤʤ�����η�����äƤ�����̤δؿ���Ʊ��̾����Ȥ����Ȥ��Ǥ���Ȥ������ȤǤ������������ε�ǽ��������C����ؿ��Ǥ����դ��ƻȤ�ʤ��ƤϤʤ�ޤ���

2�Ĥ������ؿ���Ʊ��C��̾������äƤ���ȡ���󥯻��˥��顼��ȯ�����ޤ����������򤹤뤿��ˤϡ�2�Ĥδؿ��˰ۤʤ�C��̾����Ϳ���ʤ��Ȥ��С�C��̾���ΰ����Ȥ��ư����η��ʤɤ�Ȥ��ޤ��ˡ������Ƥ�����̾���� CREATE FUNCTION��AS�����ǻ��ꤷ�ޤ��� �⤷���� AS �礬���Τޤޤξ��ϡ�CREATE FUNCTION �Ϥ��δؿ��� C ��̾���� SQL ��̾����Ʊ���Ǥ���Ȳ��ꤷ�ޤ���

Ʊ�ͤˡ�SQL�ؿ�̾��ʣ����C����ؿ��ǥ����С������ɤ���Ȥ��ϡ����줾���C����ؿ��Υ��󥹥��󥹤˰ۤʤ�̾����Ϳ�������줾��Υ����С������ɤ��줿SQL�ؿ��Τդ��路��C������������򤹤뤿���CREATE FUNCTION��ʸ�����AS������ط�����Ȥ��ޤ���

Ʊ�쥪�֥������ȥե�����򻲾Ȥ��롢CREATE FUNCTION �ƤӽФ��������֤��줿��硢���Υե�����ϰ��٤��������ɤ���ޤ���(�����餯��ȯ�ʳ���)�ե�����򥢥�����ɤ��ƥ����ɤ���ˤϡ�LOAD ����Ѥ��ޤ���

�桼������δؿ���������ˤ� DROP FUNCTION ����Ѥ��ޤ���

��¸�δؿ�����򹹿�����ˤϡ�CREATE OR REPLACE FUNCTION ����Ѥ��ޤ���������ˡ�Ǥϴؿ���̾��������η����ѹ����뤳�ȤϤǤ��ʤ����Ȥ����դ��Ʋ������� (�����Ԥʤä���硢�������̤δؿ��������� �������Ǥ���)�ޤ���CREATE OR REPLACE FUNCTION �Ǥϡ���¸�ؿ�������ͤη����ѹ������뤳�ȤϤǤ��ޤ��󡣤��Τ���ˤϡ����δؿ������������ٺ������Ʋ�������

�ؿ��������ƺ���������硢�������ؿ��ϸŤ���Τ�Ʊ�����ΤˤϤʤ�ޤ��� �Ť��ؿ��򻲾Ȥ��롢��¸�Υ롼�롢�ӥ塼���ȥꥬ�ʤɤϲ���Ƥ��ޤ��ޤ����ؿ��򻲾Ȥ��륪�֥������Ȥ��˲����ʤ��褦�ˡ��ؿ�������ѹ�����ˤ� CREATE OR REPLACE FUNCTION ����Ѥ��ޤ���

�ؿ��������ǽ�ˤ���ˤϡ��桼�������θ�����Ф� USAGE ���¤����ɬ�פ�����ޤ���

�ǥե���ȤǤϡ��ؿ��ν�ͭ�� (������) �Τߡ����δؿ���¹Ԥ��븢�¤��ݻ����Ƥ��ޤ��� ¾�Υ桼�����ؿ�����Ѥ��뤿��ˤϡ����δؿ��� EXECUTE ���¤�Ϳ������ɬ�פ�����ޤ���

��

ñ���SQL�ؿ����������ˤϰʲ��Τ褦�ˤ��ޤ���

CREATE FUNCTION one() RETURNS integer
    AS 'SELECT 1 AS RESULT;'
    LANGUAGE SQL;

SELECT one() AS answer;
 answer
--------
      1

������ϡ��桼��������(��ĥ�Ҥϥץ�åȥե�����ˤ�ä��礭���Ѥ��)funcs.so�Ȥ���̾���ζ�ͭ�饤�֥�꤫��롼�����ƤӽФ����Ȥˤ�� C �ؿ���������ޤ�����ͭ�饤�֥��ե�����ϥ����Ф�ưŪ�饤�֥�긡���ѥ����鸡������ޤ��� ��������Υ롼����Ϸ���򸡺������ѥ�᡼���Ȥ����Ϥ�����ͤ���������С�TRUE ���֤��ޤ�������� CHECK������ǻ��Ѥ���뤳�Ȥ�տޤ��Ƥ��ޤ���

CREATE FUNCTION ean_checkdigit(char, char) RETURNS boolean
    AS 'funcs' LANGUAGE C;
    
CREATE TABLE product (
    id        char(8) PRIMARY KEY,
    eanprefix char(8) CHECK (eanprefix ~ '[0-9]{2}-[0-9]{5}')
                      REFERENCES brandname(ean_prefix),
    eancode   char(6) CHECK (eancode ~ '[0-9]{6}'),
    CONSTRAINT ean    CHECK (ean_checkdigit(eanprefix, eancode))
);

������ǡ��桼������ǡ����� complex �����Ȥ߹��ߥǡ����� point �ؤη��Ѵ���Ԥʤ��ؿ���������ޤ��� ���δؿ��ϡ�C �Υ��������饳��ѥ��뤵�줿ưŪ�˥����ɤ���륪�֥������Ȥˤ�äƼ�������Ƥ��ޤ� (��ͭ���֥������ȥե���������Хե�����̾�ǻ��ꤹ��Ȥ��������ߤϴ�����ʤ���ˡ���������Ƥ��ޤ�)��PostgreSQL �˷��Ѵ��ؿ���ưŪ�˸��Ф����뤿��ˡ����� SQL �ؿ�����귿��Ʊ��̾��������ʤ���Фʤ�ޤ���Τǡ������С������ɤ��� �뤳�Ȥ��Ǥ��ޤ��󡣴ؿ�̾�� SQL ������ AS ��� 2 ���ܤη�����Ȥäƥ����С������ɤ���ޤ���

CREATE FUNCTION point(complex) RETURNS point
    AS '/home/bernie/pgsql/lib/complex.so', 'complex_to_point'
    LANGUAGE C STRICT;

�ؿ��� C ����ϰʲ��Τ褦�ˤʤ�ޤ���

Point * complex_to_point (Complex *z)
{
	Point *p;

	p = (Point *) palloc(sizeof(Point));
	p->x = z->x;
	p->y = z->y;
		
	return p;
}

�ؿ��ˡָ��� (strict)�פȵ��Ҥ���Ƥ��뤳�Ȥ����դ��Ƥ�������������ˤ�ꡢ�ؿ����Τ� NULL ���ϤΥ����å��򥹥��åפ��뤳�Ȥ��Ǥ��ޤ���

�ߴ���

CREATE FUNCTION ���ޥ�ɤ� SQL99 ���������Ƥ��ޤ��� PostgreSQL �Ǥϻ��ƤϤ��ޤ����������ʸߴ����Ϥ���ޤ���°���ϰܿ������ʤ����ޤ������Ѳ�ǽ�ʸ����ۤʤ�ޤ���

��Ϣ����

DROP FUNCTION��GRANT��LOAD��REVOKE��createlang��PostgreSQL �ץ�����ޥ�����