CREATE FUNCTION

Name

CREATE FUNCTION -- ����һ���º���

Synopsis

 CREATE [ OR REPLACE ] FUNCTION name ( [ [ argname ] 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 ��Ҫô����һ���º����� Ҫô�滻���еĶ��塣

���������һ��ģʽ������ô��������ָ����ģʽ�д��������������ڵ�ǰģʽ�д����� �º��������ֲ��ܺ�ͬһ��ģʽ�е��κδ���ͬ���������͵ĺ���ͬ���� �������������Ͳ�ͬ�ĺ�������ͬ�����������������

Ҫ����һ�����к����Ķ��壬ʹ�� CREATE OR REPLACE FUNCTION�� ���Dz�������������޸�һ�����������ֻ��߲������ͣ��������ô�ɣ���ô��ͻᴴ��һ���µģ���ͬ�ĺ������� ͬ����CREATE OR REPLACE FUNCTION Ҳ�����������޸�һ�����к����ķ������͡� Ҫ����Щ���飬�����ɾ�������´���������

�����ɾ��Ȼ���ؽ�һ���������º����;ɵĽ��Dz�ͬ��ʵ�壻�����Ҫɾ�������������Ϻ����Ĺ�����ͼ���������ȵȡ� ʹ�� CREATE OR REPLACE FUNCTION �����ڲ��ƻ����øú����Ķ����ǰ�����޸ĺ������塣

��������������û���Ϊ�����������ߡ�

����

name

Ҫ�����ĺ������֣�������ģʽ���Σ���

argname

һ�����������֡���Щ���ԣ�Ŀǰֻ�� PL/pgSQL���������ں�������ʹ�ò������֡� �����������ԣ������������ֻ�Ƕ�����ĵ���

argtype

�ú������������ͣ�������ģʽ���Σ��� ����еĻ����������Ϳ����ǻ������ͣ�Ҳ�����Ǹ������ͣ������ͣ����߿�������һ�������ֶ���ͬ�����͡�

����ʵ�����ԵIJ�ͬ�����ǻ����������������� "α����"�� ���� cstring��α���ͱ�ʾʵ�ʵIJ�������Ҫô��û��������������Ҫô������ͨ�� SQL ��������֮�⡣

һ���ֶε��������� tablename.columnname%TYPE ��ʾ�ģ�ʹ������������԰������������ڱ�����޸ġ�

rettype

�����������͡�������Ϳ�������Ϊһ���������ͣ��������ͣ������ͣ� ��������һ����������ֶΡ� ����ʵ�����ԵIJ�ͬ�����ǻ����������������� "α����"�� ���� cstring��

SETOF ���δʱ�ʾ�ú���������һ����Ŀ�� ������һ����Ŀ��

һ���ֶε�������ͨ��д tablename.columnname%TYPE �����õġ�

langname

����ʵ�ֺ��������Ե����֡� ������ SQL��C�� internal���������û�����Ĺ����������֡� Ϊ�˱������¼��ݣ������ֿ����õ����Ű�Χ��

IMMUTABLE
STABLE
VOLATILE

��Щ���Ը���ϵͳ�ѶԸú����Ķ�ε����滻��һ���Ƿ�ȫ�� ��Ҫ��������ʱ�Ż��� ����Ӧ������һ��ѡ������κ�һ����û�г��֣���ô VOLATILE ��ȱʡ���衣

IMMUTABLE ��ʾ�ú����ڸ���ͬ���IJ���ֵʱ���Ƿ�����ͬ�Ľ���� Ҳ����˵�����������ݿ���һ�����ʹ����Щ��û��ֱ�ӳ�����������б��������Ϣ�� ����������ѡ���ô�κδ���ȫ���dz��������Ըú����ĵ��ö��������滻Ϊ�ú�����ֵ��

STABLE ��ʾ��һ�α�ɨ�������ͬ����ֵ�� �ú������ȶ�������ͬ��ֵ���������Ľ�������ڲ�ͬ SQL ���֮��仯�� ���ѡ�����Щ����������ݿ���ң��������������統ǰʱ�������ȵȵĺ����Ǻܺ��ʵġ� ��Ҫע�� current_timestamp �庯���� stable (�ȶ�)�ģ���Ϊ���ǵ�ֵ��һ�������в���仯��

VOLATILE ��ʾ�ú���ֵ����������һ�α�ɨ���ڸı䣬 ��˲������κ��Ż����������ݿ⺯����������������ױ�ģ� һЩ������ random()��currval()�� timeofday()����ע���κ��и����õĺ�����������Ϊ�ױ��࣬ ��ʹ�����൱�й���ҲӦ���������������ܱ��������Ż���һ�����Ӿ��� setval()��

����ϸ�ڣ������ Section 31.6��

CALLED ON NULL INPUT
RETURNS NULL ON NULL INPUT
STRICT

CALLED ON NULL INPUT ��ȱʡ�������ú������Լ���ijЩ�����ǿ�ֵ��ʱ���ǿ��԰��������ķ�ʽ���á� ʣ�µ������Ǻ��������߱��븺�����ֵ�Լ���Ӧ��������Ӧ��

RETURNS NULL ON NULL INPUT �� STRICT ������������κβ����� NULL���˺������Ƿ��� NULL�� ��������������������������� NULL ����ʱ����ִ�иú����� ��ֻ���Զ�����һ�� NULL �����

[EXTERNAL] SECURITY INVOKER
[EXTERNAL] SECURITY DEFINER

SECURITY INVOKER �����ú��������ŵ��������û���Ȩ��ִ�С� ����ȱʡ��SECURITY DEFINER �����ú������Դ��������û���Ȩ��ִ�С�

�ؼ��� EXTERNAL ��Ŀ���Ǻ� SQL ���ݣ� �������Ǻ� SQL ��ͬ���ǣ�������Բ������������ⲿ�ĺ����� �������ǿ�ѡ�ġ�

definition

һ�����庯�����ִ�����������ȡ�������ԡ���������һ���ڲ��������֣� һ��ָ��ij��Ŀ���ļ���·����һ�� SQL ��ѯ������һ���ù�������д���ı���

obj_file, link_symbol

�����ʽ�� AS �Ӿ������ں����� C Դ�ļ���ĺ������ֺ� SQL ���������ֲ�ͬ��ʱ��ɶ�̬װ�� C ���Ժ����� �ִ� obj_file �ǰ����ɶ�̬װ�صĶ�����ļ������� link_symbol �Ǻ��������ӷ��ţ�Ҳ���Ǹú����� C Դ�ļ�������֡� ���ʡ�������ӷ��ţ���ô�ͼ������ͱ������ SQL ����ͬ����

attribute

��ʷ�����ĺ�����ѡ��Ϣ����������Կ����ڴ˳��֣�

isStrict

���� STRICT ���� RETURNS NULL ON NULL INPUT

isCachable

isCachable �� IMMUTABLE �Ĺ�ʱ�ĵ�Ч������������¼��ݣ�������Ȼ��������

�������Ǵ�Сд�޹صġ�

ע��

����� Section 31.3 ��ȡ���������д��������Ϣ��

���������㽫������ SQL �����﷨������������ͷ���ֵ�� ��������Щ����������ϸ�ڣ����磬numeric ���͵ľ����������²㺯��ʵ�ָ���ģ� ���һᱻ CREATE FUNCTION �������ĵ��̵��� ��Ҳ����˵�����ٱ�ʶ���ǿ�ƣ���

PostgreSQL ������������ Ҳ����˵��ͬһ���������������ڼ�����ͬ�ĺ����� ֻҪ���ǵIJ��������������ǡ����������к����� C ���ֱ��벻ͬ�� Ҳ����˵�����������ص� C ������ͬ�� C ���֣����磬ʹ�ò���������Ϊ C ���ֵ�һ���֣���

����ظ����� CREATE FUNCTION�����Ҷ�ָ��ͬһ��Ŀ���ļ��� ��ô���ļ�ֻװ��һ�Ρ�Ҫж�غͻָ�װ�ظ��ļ����������ڿ��������У��������ʹ�� LOAD ���

ʹ�� DROP FUNCTION ɾ��һ���û����庯����

ͨ����˵��ʹ����Ԫ����Χ������ Section 4.1.2.2������д���������ִ��� ������ʹ����ͨ�ĵ����Ű�Χ�﷨�᷽��ܶࡣ�����ʹ����Ԫ����Χ�� ��ô������������κε����Ż�б�ܶ���������д˫�ݵķ������ݡ�

Ҫ�ܶ��庯�����û�����Ը������� USAGE Ȩ�ޡ�

����

������һ���򵥵����ӣ����ڰ����㿪ʼ���������� ������Ϣ�����ӣ����� Section 31.3��

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

�� PL/pgSQL ����һ�����������ò�������

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

������

�� SQL:1999 �ﶨ����һ��CREATE FUNCTION PostgreSQL �ĺ������Ƶ��Dz����ݡ� ��������Dz�����ֲ�ģ�����ʹ�õIJ�ͬ����Ҳ����ˡ�

�ּ�

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