<REFENTRY ID="SQL-CREATEFUNCTION"> <REFMETA> <REFENTRYTITLE> CREATE FUNCTION </REFENTRYTITLE> <REFMISCINFO>SQL - Language Statements</REFMISCINFO> </REFMETA> <REFNAMEDIV> <REFNAME> CREATE FUNCTION </REFNAME> <REFPURPOSE> Defines a new function </REFPURPOSE> <REFSYNOPSISDIV> <REFSYNOPSISDIVINFO> <DATE>1998-09-09</DATE> </REFSYNOPSISDIVINFO> <SYNOPSIS> CREATE FUNCTION <replaceable class="parameter">name</replaceable> ( [ <replaceable class="parameter">ftype</replaceable> [, ...] ] ) RETURNS <replaceable class="parameter">rtype</replaceable> AS <replaceable class="parameter">path</replaceable> LANGUAGE '<replaceable class="parameter">langname</replaceable>' </SYNOPSIS> <REFSECT2 ID="R2-SQL-CREATEFUNCTION-1"> <REFSECT2INFO> <DATE>1998-09-09</DATE> </REFSECT2INFO> <TITLE> Inputs </TITLE> <PARA> <VARIABLELIST> <VARLISTENTRY> <TERM> <replaceable class="parameter">name</replaceable> </TERM> <LISTITEM> <PARA> The name of a function to create. </PARA> </LISTITEM> </VARLISTENTRY> <VARLISTENTRY> <TERM> <replaceable class="parameter">ftype</replaceable> </TERM> <LISTITEM> <PARA> The data type of function arguments. </PARA> </LISTITEM> </VARLISTENTRY> <VARLISTENTRY> <TERM> <replaceable class="parameter">rtype</replaceable> </TERM> <LISTITEM> <PARA> The return data type. </PARA> </LISTITEM> </VARLISTENTRY> <VARLISTENTRY> <TERM> <replaceable class="parameter">path</replaceable> </TERM> <LISTITEM> <PARA> May be either an SQL-query or an absolute path to an object file. </PARA> </LISTITEM> </VARLISTENTRY> <VARLISTENTRY> <TERM> <replaceable class="parameter">langname</replaceable> </TERM> <LISTITEM> <PARA> may be '<literal>C</literal>', '<literal>sql</literal>', '<literal>internal</literal>' or '<replaceable class="parameter">plname</replaceable>', where '<replaceable class="parameter">plname</replaceable>' is the name of a created procedural language. See <command>CREATE LANGUAGE</command> for details. </PARA> </LISTITEM> </VARLISTENTRY> </variablelist> </REFSECT2> <REFSECT2 ID="R2-SQL-CREATEFUNCTION-2"> <REFSECT2INFO> <DATE>1998-09-09</DATE> </REFSECT2INFO> <TITLE> Outputs </TITLE> <PARA> <VARIABLELIST> <VARLISTENTRY> <TERM> <ReturnValue>CREATE</ReturnValue> </TERM> <LISTITEM> <PARA> This is returned if the command completes successfully. </VARIABLELIST> </REFSECT2> </REFSYNOPSISDIV> <REFSECT1 ID="R1-SQL-CREATEFUNCTION-1"> <REFSECT1INFO> <DATE>1998-09-09</DATE> </REFSECT1INFO> <TITLE> Description </TITLE> <PARA> <command>CREATE FUNCTION</command> allows a <productname>Postgres</productname> user to register a function with a database. Subsequently, this user is treated as the owner of the function. </PARA> <REFSECT2 ID="R2-SQL-CREATEFUNCTION-3"> <REFSECT2INFO> <DATE>1998-09-09</DATE> </REFSECT2INFO> <TITLE> Notes </TITLE> <PARA> Refer to the chapter on functions in the <citetitle>PostgreSQL Programmer's Guide</citetitle> for further information. </PARA> <PARA> Use <command>DROP FUNCTION</command> to drop user-defined functions. </PARA> </REFSECT2> <REFSECT1 ID="R1-SQL-CREATEFUNCTION-2"> <TITLE> Usage </TITLE> <PARA> To create a simple SQL function: </PARA> <ProgramListing> CREATE FUNCTION one() RETURNS int4 AS 'SELECT 1 AS RESULT' LANGUAGE 'sql'; SELECT one() AS answer; <computeroutput> answer ------ 1 </computeroutput> </ProgramListing> <para> To create a C function, calling a routine from a user-created shared library. This particular routine calculates a check digit and returns TRUE if the check digit in the function parameters is correct. It is intended for use in a CHECK contraint. </para> <programlisting> <userinput> CREATE FUNCTION ean_checkdigit(bpchar, bpchar) RETURNS bool AS '/usr1/proj/bray/sql/funcs.so' 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)) );</userinput> </programlisting> </REFSECT1> <REFSECT1 ID="R1-SQL-CREATEFUNCTION-3"> <TITLE> Bugs </TITLE> <PARA> A C function cannot return a set of values. </PARA> </REFSECT1> <REFSECT1 ID="R1-SQL-CREATEFUNCTION-4"> <TITLE> Compatibility </TITLE> <PARA> <command>CREATE FUNCTION</command> is a <productname>Postgres</productname> language extension. </PARA> <REFSECT2 ID="R2-SQL-CREATEFUNCTION-4"> <REFSECT2INFO> <DATE>1998-09-09</DATE> </REFSECT2INFO> <TITLE> SQL/PSM </TITLE> <para> <note> <para> PSM stands for Persistent Stored Modules. It is a procedural language and it was originally hoped that PSM would be ratified as an official standard by late 1996. As of mid-1998, this has not yet happened, but it is hoped that PSM will eventually become a standard. </para> </note> SQL/PSM <command>CREATE FUNCTION</command> has the following syntax: <synopsis> CREATE FUNCTION <replaceable class="parameter">name</replaceable> ( [ [ IN | OUT | INOUT ] <replaceable class="parameter">parm</replaceable> <replaceable class="parameter">type</replaceable> [, ...] ] ) RETURNS <replaceable class="parameter">rtype</replaceable> LANGUAGE '<replaceable class="parameter">langname</replaceable>' ESPECIFIC <replaceable class="parameter">routine</replaceable> <replaceable class="parameter">SQL-statement</replaceable> </synopsis> </para> </refsect2> </refsect1> </REFENTRY> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t sgml-parent-document:nil sgml-default-dtd-file:"../reference.ced" sgml-exposed-tags:nil sgml-local-catalogs:"/usr/lib/sgml/catalog" sgml-local-ecat-files:nil End: -->