1999-07-22 17:09:15 +02:00
|
|
|
<!--
|
2004-11-27 22:27:08 +01:00
|
|
|
$PostgreSQL: pgsql/doc/src/sgml/ref/create_function.sgml,v 1.63 2004/11/27 21:27:07 petere Exp $
|
1999-07-22 17:09:15 +02:00
|
|
|
-->
|
|
|
|
|
1999-06-14 09:37:05 +02:00
|
|
|
<refentry id="SQL-CREATEFUNCTION">
|
|
|
|
<refmeta>
|
2001-11-18 21:35:02 +01:00
|
|
|
<refentrytitle id="SQL-CREATEFUNCTION-TITLE">CREATE FUNCTION</refentrytitle>
|
1999-06-14 09:37:05 +02:00
|
|
|
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
|
|
|
</refmeta>
|
2001-05-19 11:01:10 +02:00
|
|
|
|
1999-06-14 09:37:05 +02:00
|
|
|
<refnamediv>
|
2001-05-19 11:01:10 +02:00
|
|
|
<refname>CREATE FUNCTION</refname>
|
2001-09-03 14:57:50 +02:00
|
|
|
<refpurpose>define a new function</refpurpose>
|
1998-12-29 03:24:47 +01:00
|
|
|
</refnamediv>
|
2001-05-19 11:01:10 +02:00
|
|
|
|
2003-08-31 19:32:24 +02:00
|
|
|
<indexterm zone="sql-createfunction">
|
|
|
|
<primary>CREATE FUNCTION</primary>
|
|
|
|
</indexterm>
|
|
|
|
|
1999-06-14 09:37:05 +02:00
|
|
|
<refsynopsisdiv>
|
2001-05-19 11:01:10 +02:00
|
|
|
<synopsis>
|
2004-06-25 09:05:34 +02:00
|
|
|
CREATE [ OR REPLACE ] FUNCTION <replaceable class="parameter">name</replaceable> ( [ [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] )
|
2001-05-19 11:01:10 +02:00
|
|
|
RETURNS <replaceable class="parameter">rettype</replaceable>
|
2002-05-17 20:32:52 +02:00
|
|
|
{ LANGUAGE <replaceable class="parameter">langname</replaceable>
|
|
|
|
| IMMUTABLE | STABLE | VOLATILE
|
|
|
|
| CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
|
2004-06-25 09:05:34 +02:00
|
|
|
| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
|
2002-05-17 20:32:52 +02:00
|
|
|
| AS '<replaceable class="parameter">definition</replaceable>'
|
|
|
|
| AS '<replaceable class="parameter">obj_file</replaceable>', '<replaceable class="parameter">link_symbol</replaceable>'
|
|
|
|
} ...
|
2000-03-27 19:14:43 +02:00
|
|
|
[ WITH ( <replaceable class="parameter">attribute</replaceable> [, ...] ) ]
|
2001-05-19 11:01:10 +02:00
|
|
|
</synopsis>
|
|
|
|
</refsynopsisdiv>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
2001-05-19 11:01:10 +02:00
|
|
|
<refsect1 id="sql-createfunction-description">
|
|
|
|
<title>Description</title>
|
1999-07-06 19:16:42 +02:00
|
|
|
|
2001-05-19 11:01:10 +02:00
|
|
|
<para>
|
|
|
|
<command>CREATE FUNCTION</command> defines a new function.
|
2002-05-17 20:32:52 +02:00
|
|
|
<command>CREATE OR REPLACE FUNCTION</command> will either create a
|
|
|
|
new function, or replace an existing definition.
|
|
|
|
</para>
|
|
|
|
|
2003-04-22 12:08:08 +02:00
|
|
|
<para>
|
|
|
|
If a schema name is included, then the function is created in the
|
|
|
|
specified schema. Otherwise it is created in the current schema.
|
|
|
|
The name of the new function must not match any existing function
|
|
|
|
with the same argument types in the same schema. However,
|
|
|
|
functions of different argument types may share a name (this is
|
|
|
|
called <firstterm>overloading</>).
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
To update the definition of an existing function, use
|
|
|
|
<command>CREATE OR REPLACE FUNCTION</command>. It is not possible
|
|
|
|
to change the name or argument types of a function this way (if you
|
2004-05-17 01:22:08 +02:00
|
|
|
tried, you would actually be creating a new, distinct function).
|
|
|
|
Also, <command>CREATE OR REPLACE FUNCTION</command> will not let
|
|
|
|
you change the return type of an existing function. To do that,
|
|
|
|
you must drop and recreate the function.
|
2003-04-22 12:08:08 +02:00
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
If you drop and then recreate a function, the new function is not
|
|
|
|
the same entity as the old; you will break existing rules, views,
|
|
|
|
triggers, etc. that referred to the old function. Use
|
|
|
|
<command>CREATE OR REPLACE FUNCTION</command> to change a function
|
|
|
|
definition without breaking objects that refer to the function.
|
|
|
|
</para>
|
|
|
|
|
2002-05-17 20:32:52 +02:00
|
|
|
<para>
|
|
|
|
The user that creates the function becomes the owner of the function.
|
|
|
|
</para>
|
2003-04-22 12:08:08 +02:00
|
|
|
</refsect1>
|
|
|
|
|
|
|
|
<refsect1>
|
|
|
|
<title>Parameters</title>
|
1999-07-06 19:16:42 +02:00
|
|
|
|
2001-05-19 11:01:10 +02:00
|
|
|
<variablelist>
|
1999-07-06 19:16:42 +02:00
|
|
|
|
2001-05-19 11:01:10 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="parameter">name</replaceable></term>
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2004-09-16 06:16:08 +02:00
|
|
|
The name (optionally schema-qualified) of the function to create.
|
2001-05-19 11:01:10 +02:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
|
2004-06-25 09:05:34 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="parameter">argname</replaceable></term>
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
The name of an argument. Some languages (currently only PL/pgSQL) let
|
|
|
|
you use the name in the function body. For other languages the
|
|
|
|
argument name is just extra documentation.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
|
2001-05-19 11:01:10 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="parameter">argtype</replaceable></term>
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2003-03-20 05:41:13 +01:00
|
|
|
The data type(s) of the function's arguments (optionally
|
2003-04-22 12:08:08 +02:00
|
|
|
schema-qualified), if any. The argument types may be base, complex, or
|
2003-11-12 23:47:47 +01:00
|
|
|
domains, or copy the type of an existing column.
|
2003-03-20 05:41:13 +01:00
|
|
|
</para>
|
|
|
|
<para>
|
2003-04-22 12:08:08 +02:00
|
|
|
The type of a column is referenced by writing
|
|
|
|
<literal><replaceable
|
2003-03-20 05:41:13 +01:00
|
|
|
class="parameter">tablename</replaceable>.<replaceable
|
2003-04-22 12:08:08 +02:00
|
|
|
class="parameter">columnname</replaceable>%TYPE</literal>;
|
2003-03-20 05:41:13 +01:00
|
|
|
using this can sometimes help make a function independent from
|
|
|
|
changes to the definition of a table.
|
|
|
|
</para>
|
|
|
|
<para>
|
|
|
|
Depending on the implementation language it may also be allowed
|
2003-04-22 12:08:08 +02:00
|
|
|
to specify <quote>pseudotypes</> such as <type>cstring</>.
|
|
|
|
Pseudotypes indicate that the actual argument type is either
|
2003-03-20 05:41:13 +01:00
|
|
|
incompletely specified, or outside the set of ordinary SQL data types.
|
2001-05-19 11:01:10 +02:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="parameter">rettype</replaceable></term>
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2003-03-20 05:41:13 +01:00
|
|
|
The return data type (optionally schema-qualified). The return type
|
2003-11-12 23:47:47 +01:00
|
|
|
may be a base type, complex type, or a domain,
|
|
|
|
or may be specified to copy the type of an existing column. See the description
|
2003-03-20 05:41:13 +01:00
|
|
|
under <literal>argtype</literal> above on how to reference the type
|
|
|
|
of an existing column.
|
|
|
|
</para>
|
|
|
|
<para>
|
2002-08-22 02:01:51 +02:00
|
|
|
Depending on the implementation language it may also be allowed
|
2003-04-22 12:08:08 +02:00
|
|
|
to specify <quote>pseudotypes</> such as <type>cstring</>.
|
|
|
|
The <literal>SETOF</literal>
|
2001-05-19 11:01:10 +02:00
|
|
|
modifier indicates that the function will return a set of
|
2002-08-22 02:01:51 +02:00
|
|
|
items, rather than a single item.
|
2001-05-19 11:01:10 +02:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
|
2002-05-17 20:32:52 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="parameter">langname</replaceable></term>
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
The name of the language that the function is implemented in.
|
|
|
|
May be <literal>SQL</literal>, <literal>C</literal>,
|
|
|
|
<literal>internal</literal>, or the name of a user-defined
|
|
|
|
procedural language. (See also <xref linkend="app-createlang"
|
|
|
|
endterm="app-createlang-title">.) For backward compatibility,
|
|
|
|
the name may be enclosed by single quotes.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
<varlistentry>
|
2003-04-22 12:08:08 +02:00
|
|
|
<term><literal>IMMUTABLE</literal></term>
|
|
|
|
<term><literal>STABLE</literal></term>
|
|
|
|
<term><literal>VOLATILE</literal></term>
|
2002-05-17 20:32:52 +02:00
|
|
|
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
These attributes inform the system whether it is safe to
|
|
|
|
replace multiple evaluations of the function with a single
|
|
|
|
evaluation, for run-time optimization. At most one choice
|
2004-09-13 22:10:13 +02:00
|
|
|
may be specified. If none of these appear,
|
2002-05-17 20:32:52 +02:00
|
|
|
<literal>VOLATILE</literal> is the default assumption.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
<literal>IMMUTABLE</literal> indicates that the function always
|
|
|
|
returns the same result when given the same argument values; that
|
|
|
|
is, it does not do database lookups or otherwise use information not
|
2003-04-22 12:08:08 +02:00
|
|
|
directly present in its argument list. If this option is given,
|
2002-05-17 20:32:52 +02:00
|
|
|
any call of the function with all-constant arguments can be
|
|
|
|
immediately replaced with the function value.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
<literal>STABLE</literal> indicates that within a single table scan
|
|
|
|
the function will consistently
|
|
|
|
return the same result for the same argument values, but that its
|
|
|
|
result could change across SQL statements. This is the appropriate
|
|
|
|
selection for functions whose results depend on database lookups,
|
|
|
|
parameter variables (such as the current time zone), etc. Also note
|
2003-04-22 12:08:08 +02:00
|
|
|
that the <function>current_timestamp</> family of functions qualify
|
2002-05-17 20:32:52 +02:00
|
|
|
as stable, since their values do not change within a transaction.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
<literal>VOLATILE</literal> indicates that the function value can
|
|
|
|
change even within a single table scan, so no optimizations can be
|
|
|
|
made. Relatively few database functions are volatile in this sense;
|
|
|
|
some examples are <literal>random()</>, <literal>currval()</>,
|
|
|
|
<literal>timeofday()</>. Note that any function that has side-effects
|
|
|
|
must be classified volatile, even if its result is quite predictable,
|
|
|
|
to prevent calls from being optimized away; an example is
|
|
|
|
<literal>setval()</>.
|
|
|
|
</para>
|
2004-09-13 22:10:13 +02:00
|
|
|
|
|
|
|
<para>
|
|
|
|
For additional details see <xref linkend="xfunc-volatility">.
|
|
|
|
</para>
|
2002-05-17 20:32:52 +02:00
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
<varlistentry>
|
2003-04-22 12:08:08 +02:00
|
|
|
<term><literal>CALLED ON NULL INPUT</literal></term>
|
|
|
|
<term><literal>RETURNS NULL ON NULL INPUT</literal></term>
|
|
|
|
<term><literal>STRICT</literal></term>
|
2002-05-17 20:32:52 +02:00
|
|
|
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
<literal>CALLED ON NULL INPUT</literal> (the default) indicates
|
|
|
|
that the function will be called normally when some of its
|
|
|
|
arguments are null. It is then the function author's
|
2002-09-21 20:32:54 +02:00
|
|
|
responsibility to check for null values if necessary and respond
|
2002-05-17 20:32:52 +02:00
|
|
|
appropriately.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
<literal>RETURNS NULL ON NULL INPUT</literal> or
|
|
|
|
<literal>STRICT</literal> indicates that the function always
|
2003-04-22 12:08:08 +02:00
|
|
|
returns null whenever any of its arguments are null. If this
|
2002-05-17 20:32:52 +02:00
|
|
|
parameter is specified, the function is not executed when there
|
2003-04-22 12:08:08 +02:00
|
|
|
are null arguments; instead a null result is assumed
|
2002-05-17 20:32:52 +02:00
|
|
|
automatically.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
|
2002-05-18 15:48:01 +02:00
|
|
|
<varlistentry>
|
2003-04-22 12:08:08 +02:00
|
|
|
<term><literal><optional>EXTERNAL</optional> SECURITY INVOKER</literal></term>
|
|
|
|
<term><literal><optional>EXTERNAL</optional> SECURITY DEFINER</literal></term>
|
2002-05-18 15:48:01 +02:00
|
|
|
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
<literal>SECURITY INVOKER</literal> indicates that the function
|
|
|
|
is to be executed with the privileges of the user that calls it.
|
|
|
|
That is the default. <literal>SECURITY DEFINER</literal>
|
|
|
|
specifies that the function is to be executed with the
|
|
|
|
privileges of the user that created it.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
The key word <literal>EXTERNAL</literal> is present for SQL
|
2003-04-22 12:08:08 +02:00
|
|
|
conformance but is optional since, unlike in SQL, this feature
|
2002-05-18 15:48:01 +02:00
|
|
|
does not only apply to external functions.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
|
2001-05-19 11:01:10 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="parameter">definition</replaceable></term>
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2004-09-21 00:48:29 +02:00
|
|
|
A string constant defining the function; the meaning depends on the
|
2001-05-19 11:01:10 +02:00
|
|
|
language. It may be an internal function name, the path to an
|
2004-09-21 00:48:29 +02:00
|
|
|
object file, an SQL command, or text in a procedural language.
|
2001-05-19 11:01:10 +02:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
<varlistentry>
|
2003-04-22 12:08:08 +02:00
|
|
|
<term><literal><replaceable class="parameter">obj_file</replaceable>, <replaceable class="parameter">link_symbol</replaceable></literal></term>
|
2001-05-19 11:01:10 +02:00
|
|
|
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
This form of the <literal>AS</literal> clause is used for
|
2003-04-22 12:08:08 +02:00
|
|
|
dynamically loadable C language functions when the function name
|
2001-05-19 11:01:10 +02:00
|
|
|
in the C language source code is not the same as the name of
|
|
|
|
the SQL function. The string <replaceable
|
|
|
|
class="parameter">obj_file</replaceable> is the name of the
|
|
|
|
file containing the dynamically loadable object, and
|
|
|
|
<replaceable class="parameter">link_symbol</replaceable> is the
|
2003-04-22 12:08:08 +02:00
|
|
|
function's link symbol, that is, the name of the function in the C
|
|
|
|
language source code. If the link symbol is omitted, it is assumed
|
|
|
|
to be the same as the name of the SQL function being defined.
|
2001-05-19 11:01:10 +02:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="parameter">attribute</replaceable></term>
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2002-05-17 20:32:52 +02:00
|
|
|
The historical way to specify optional pieces of information
|
|
|
|
about the function. The following attributes may appear here:
|
|
|
|
|
|
|
|
<variablelist>
|
|
|
|
<varlistentry>
|
2002-09-21 20:32:54 +02:00
|
|
|
<term><literal>isStrict</></term>
|
2002-05-17 20:32:52 +02:00
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
Equivalent to <literal>STRICT</literal> or <literal>RETURNS NULL ON NULL INPUT</literal>
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
<varlistentry>
|
2002-09-21 20:32:54 +02:00
|
|
|
<term><literal>isCachable</></term>
|
2002-05-17 20:32:52 +02:00
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
<literal>isCachable</literal> is an obsolete equivalent of
|
2002-07-24 21:11:14 +02:00
|
|
|
<literal>IMMUTABLE</literal>; it's still accepted for
|
2002-05-17 20:32:52 +02:00
|
|
|
backwards-compatibility reasons.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
</variablelist>
|
|
|
|
|
|
|
|
Attribute names are not case-sensitive.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
2001-05-19 11:01:10 +02:00
|
|
|
|
|
|
|
</variablelist>
|
2000-08-25 01:36:29 +02:00
|
|
|
|
2001-05-19 11:01:10 +02:00
|
|
|
</refsect1>
|
2000-08-25 01:36:29 +02:00
|
|
|
|
2001-05-19 11:01:10 +02:00
|
|
|
<refsect1 id="sql-createfunction-notes">
|
|
|
|
<title>Notes</title>
|
2000-03-27 19:14:43 +02:00
|
|
|
|
1999-06-14 09:37:05 +02:00
|
|
|
<para>
|
2003-03-25 17:15:44 +01:00
|
|
|
Refer to <xref linkend="xfunc"> for further information on writing
|
2003-04-22 12:08:08 +02:00
|
|
|
functions.
|
1999-06-14 09:37:05 +02:00
|
|
|
</para>
|
1999-07-22 17:09:15 +02:00
|
|
|
|
2000-03-27 19:14:43 +02:00
|
|
|
<para>
|
2001-05-19 11:01:10 +02:00
|
|
|
The full <acronym>SQL</acronym> type syntax is allowed for
|
2000-03-27 19:14:43 +02:00
|
|
|
input arguments and return value. However, some details of the
|
2000-10-05 21:48:34 +02:00
|
|
|
type specification (e.g., the precision field for
|
2003-04-22 12:08:08 +02:00
|
|
|
type <type>numeric</type>) are the responsibility of the
|
2000-03-27 19:14:43 +02:00
|
|
|
underlying function implementation and are silently swallowed
|
2000-08-25 01:36:29 +02:00
|
|
|
(i.e., not recognized or
|
2000-03-27 19:14:43 +02:00
|
|
|
enforced) by the <command>CREATE FUNCTION</command> command.
|
|
|
|
</para>
|
1999-05-20 04:57:15 +02:00
|
|
|
|
1999-07-22 17:09:15 +02:00
|
|
|
<para>
|
2003-04-22 12:08:08 +02:00
|
|
|
<productname>PostgreSQL</productname> allows function
|
|
|
|
<firstterm>overloading</firstterm>; that is, the same name can be
|
|
|
|
used for several different functions so long as they have distinct
|
|
|
|
argument types. However, the C names of all functions must be
|
|
|
|
different, so you must give overloaded C functions different C
|
|
|
|
names (for example, use the argument types as part of the C
|
|
|
|
names).
|
1999-07-22 17:09:15 +02:00
|
|
|
</para>
|
|
|
|
|
2001-05-19 11:01:10 +02:00
|
|
|
<para>
|
|
|
|
When repeated <command>CREATE FUNCTION</command> calls refer to
|
|
|
|
the same object file, the file is only loaded once. To unload and
|
|
|
|
reload the file (perhaps during development), use the <xref
|
2001-11-18 21:35:02 +01:00
|
|
|
linkend="sql-load" endterm="sql-load-title"> command.
|
2001-05-19 11:01:10 +02:00
|
|
|
</para>
|
|
|
|
|
2001-10-02 23:39:36 +02:00
|
|
|
<para>
|
2004-05-17 01:22:08 +02:00
|
|
|
Use <xref linkend="sql-dropfunction"
|
|
|
|
endterm="sql-dropfunction-title"> to remove user-defined
|
|
|
|
functions.
|
2001-10-02 23:39:36 +02:00
|
|
|
</para>
|
|
|
|
|
2004-09-21 00:48:29 +02:00
|
|
|
<para>
|
|
|
|
It is often helpful to use dollar quoting (see <xref
|
|
|
|
linkend="sql-syntax-dollar-quoting">) to write the function definition
|
|
|
|
string, rather than the normal single quote syntax. Without dollar
|
|
|
|
quoting, any single quotes or backslashes in the function definition must
|
|
|
|
be escaped by doubling them.
|
|
|
|
</para>
|
2003-10-26 05:34:05 +01:00
|
|
|
|
|
|
|
<para>
|
|
|
|
To be able to define a function, the user must have the
|
|
|
|
<literal>USAGE</literal> privilege on the language.
|
|
|
|
</para>
|
|
|
|
|
1998-12-29 03:24:47 +01:00
|
|
|
</refsect1>
|
2001-05-19 11:01:10 +02:00
|
|
|
|
|
|
|
<refsect1 id="sql-createfunction-examples">
|
|
|
|
<title>Examples</title>
|
|
|
|
|
1999-06-14 09:37:05 +02:00
|
|
|
<para>
|
2003-09-10 22:13:45 +02:00
|
|
|
Here is a trivial example to help you get started. For more
|
2003-04-22 12:08:08 +02:00
|
|
|
information and examples, see <xref linkend="xfunc">.
|
2001-05-19 11:01:10 +02:00
|
|
|
<programlisting>
|
2003-04-22 12:08:08 +02:00
|
|
|
CREATE FUNCTION add(integer, integer) RETURNS integer
|
2004-05-17 01:22:08 +02:00
|
|
|
AS $$select $1 + $2;$$
|
2003-04-22 12:08:08 +02:00
|
|
|
LANGUAGE SQL
|
|
|
|
IMMUTABLE
|
|
|
|
RETURNS NULL ON NULL INPUT;
|
2004-07-12 01:23:43 +02:00
|
|
|
</programlisting>
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
2004-10-01 04:00:44 +02:00
|
|
|
Increment an integer, making use of an argument name, in
|
|
|
|
<application>PL/pgSQL</application>:
|
2004-07-12 01:23:43 +02:00
|
|
|
|
|
|
|
<programlisting>
|
|
|
|
CREATE OR REPLACE FUNCTION increment(i integer) RETURNS integer AS '
|
2004-09-21 00:48:29 +02:00
|
|
|
BEGIN
|
|
|
|
RETURN i + 1;
|
|
|
|
END;' LANGUAGE plpgsql;
|
2001-05-19 11:01:10 +02:00
|
|
|
</programlisting>
|
|
|
|
</para>
|
1999-06-14 09:37:05 +02:00
|
|
|
</refsect1>
|
2001-05-19 11:01:10 +02:00
|
|
|
|
1998-05-13 07:34:00 +02:00
|
|
|
|
2001-05-19 11:01:10 +02:00
|
|
|
<refsect1 id="sql-createfunction-compat">
|
|
|
|
<title>Compatibility</title>
|
1999-07-22 17:09:15 +02:00
|
|
|
|
2001-05-19 11:01:10 +02:00
|
|
|
<para>
|
2004-11-27 22:27:08 +01:00
|
|
|
A <command>CREATE FUNCTION</command> command is defined in SQL:1999 and later.
|
2003-09-11 23:42:20 +02:00
|
|
|
The <productname>PostgreSQL</productname> version is similar but
|
2002-05-17 20:32:52 +02:00
|
|
|
not fully compatible. The attributes are not portable, neither are the
|
2001-05-19 11:01:10 +02:00
|
|
|
different available languages.
|
|
|
|
</para>
|
|
|
|
</refsect1>
|
1998-09-16 16:43:12 +02:00
|
|
|
|
2001-05-19 11:01:10 +02:00
|
|
|
|
|
|
|
<refsect1 id="sql-createfunction-seealso">
|
|
|
|
<title>See Also</title>
|
|
|
|
|
|
|
|
<para>
|
2003-06-27 16:45:32 +02:00
|
|
|
<xref linkend="sql-alterfunction" endterm="sql-alterfunction-title">,
|
2002-05-17 20:32:52 +02:00
|
|
|
<xref linkend="sql-dropfunction" endterm="sql-dropfunction-title">,
|
|
|
|
<xref linkend="sql-grant" endterm="sql-grant-title">,
|
|
|
|
<xref linkend="sql-load" endterm="sql-load-title">,
|
|
|
|
<xref linkend="sql-revoke" endterm="sql-revoke-title">,
|
2003-03-25 17:15:44 +01:00
|
|
|
<xref linkend="app-createlang">
|
2001-05-19 11:01:10 +02:00
|
|
|
</para>
|
1998-05-13 07:34:00 +02:00
|
|
|
</refsect1>
|
2001-05-19 11:01:10 +02:00
|
|
|
|
1999-06-14 09:37:05 +02:00
|
|
|
</refentry>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
|
|
Local variables:
|
2000-03-27 19:14:43 +02:00
|
|
|
mode:sgml
|
1999-06-14 09:37:05 +02:00
|
|
|
sgml-omittag:nil
|
1998-05-13 07:34:00 +02:00
|
|
|
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
|
2000-03-27 19:14:43 +02:00
|
|
|
sgml-local-catalogs:("/usr/lib/sgml/catalog")
|
1998-05-13 07:34:00 +02:00
|
|
|
sgml-local-ecat-files:nil
|
|
|
|
End:
|
|
|
|
-->
|