Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb2e7a4c

Browse files
committed
> Here's the first doc patch for SRFs. The patch covers general
> information and SQL language specific info wrt SRFs. I've taken to> calling this feature "Table Fuctions" to be consistent with (at least)> one well known RDBMS.Joe Conway
1 parent3f90b17 commitb2e7a4c

File tree

1 file changed

+92
-11
lines changed

1 file changed

+92
-11
lines changed

‎doc/src/sgml/xfunc.sgml

Lines changed: 92 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!--
2-
$Header: /cvsroot/pgsql/doc/src/sgml/xfunc.sgml,v 1.51 2002/03/22 19:20:33 petere Exp $
2+
$Header: /cvsroot/pgsql/doc/src/sgml/xfunc.sgml,v 1.52 2002/06/20 16:57:00 momjian Exp $
33
-->
44

55
<chapter id="xfunc">
@@ -188,6 +188,7 @@ SELECT clean_EMP();
188188
1
189189
</screen>
190190
</para>
191+
191192
</sect2>
192193

193194
<sect2>
@@ -407,21 +408,53 @@ SELECT getname(new_emp());
407408
</sect2>
408409

409410
<sect2>
410-
<title><acronym>SQL</acronym> Functions Returning Sets</title>
411+
<title><acronym>SQL</acronym> Table Functions (Functions Returning Sets)</title>
412+
413+
<para>
414+
A table function is one that may be used in the <command>FROM</command>
415+
clause of a query. All SQL Language functions may be used in this manner.
416+
If the function is defined to return a base type, the table function
417+
produces a one column result set. If the function is defined to
418+
return <literal>SETOF <replaceable>sometype</></literal>, the table
419+
function returns multiple rows. To illustrate a SQL table function,
420+
consider the following, which returns <literal>SETOF</literal> a
421+
composite type:
422+
423+
<programlisting>
424+
CREATE TABLE foo (fooid int, foosubid int, fooname text, primary key(fooid,foosubid));
425+
INSERT INTO foo VALUES(1,1,'Joe');
426+
INSERT INTO foo VALUES(1,2,'Ed');
427+
INSERT INTO foo VALUES(2,1,'Mary');
428+
CREATE FUNCTION getfoo(int) RETURNS setof foo AS '
429+
SELECT * FROM foo WHERE fooid = $1;
430+
' LANGUAGE SQL;
431+
SELECT * FROM getfoo(1) AS t1;
432+
</programlisting>
433+
434+
<screen>
435+
fooid | foosubid | fooname
436+
-------+----------+---------
437+
1 | 1 | Joe
438+
1 | 2 | Ed
439+
(2 rows)
440+
</screen>
441+
</para>
411442

412443
<para>
413-
As previously mentioned, an SQL function may be declared as
414-
returning <literal>SETOF <replaceable>sometype</></literal>.
415-
In this case the function's final <command>SELECT</> query is executed to
416-
completion, and each row it outputs is returned as an element
417-
of the set.
444+
When an SQL function is declared as returning <literal>SETOF
445+
<replaceable>sometype</></literal>, the function's final
446+
<command>SELECT</> query is executed to completion, and each row it
447+
outputs is returned as an element of the set.
418448
</para>
419449

420450
<para>
421-
Functions returning sets may only be called in the target list
422-
of a <command>SELECT</> query. For each row that the <command>SELECT</> generates by itself,
423-
the function returning set is invoked, and an output row is generated
424-
for each element of the function's result set. An example:
451+
Functions returning sets may also currently be called in the target list
452+
of a <command>SELECT</> query. For each row that the <command>SELECT</>
453+
generates by itself, the function returning set is invoked, and an output
454+
row is generated for each element of the function's result set. Note,
455+
however, that this capability is deprecated and may be removed in future
456+
releases. The following is an example function returning a set from the
457+
target list:
425458

426459
<programlisting>
427460
CREATE FUNCTION listchildren(text) RETURNS SETOF text AS
@@ -1620,6 +1653,54 @@ CREATE FUNCTION test(int, int) RETURNS int
16201653
</para>
16211654
</sect1>
16221655

1656+
<sect1 id="xfunc-tablefunctions">
1657+
<title>Table Functions</title>
1658+
1659+
<indexterm zone="xfunc-tablefunctions"><primary>function</></>
1660+
1661+
<para>
1662+
Table functions are functions that produce a set of rows, made up of
1663+
either base (scalar) data types, or composite (multi-column) data types.
1664+
They are used like a table, view, or subselect in the <literal>FROM</>
1665+
clause of a query. Columns returned by table functions may be included in
1666+
<literal>SELECT</>, <literal>JOIN</>, or <literal>WHERE</> clauses in the
1667+
same manner as a table, view, or subselect column.
1668+
</para>
1669+
1670+
<para>
1671+
If a table function returns a base data type, the single result column
1672+
is named for the function. If the function returns a composite type, the
1673+
result columns get the same names as the individual attributes of the type.
1674+
</para>
1675+
1676+
<para>
1677+
A table function may be aliased in the <literal>FROM</> clause, but it also
1678+
may be left unaliased. If a function is used in the FROM clause with no
1679+
alias, the function name is used as the relation name.
1680+
</para>
1681+
1682+
<para>
1683+
Table functions work wherever tables do in <literal>SELECT</> statements.
1684+
For example
1685+
<programlisting>
1686+
CREATE TABLE foo (fooid int, foosubid int, fooname text, primary key(fooid,foosubid));
1687+
CREATE FUNCTION getfoo(int) RETURNS foo AS 'SELECT * FROM foo WHERE fooid = $1;' LANGUAGE SQL;
1688+
SELECT * FROM getfoo(1) AS t1;
1689+
SELECT * FROM foo where foosubid in (select foosubid from getfoo(foo.fooid) z where z.fooid = foo.fooid);
1690+
CREATE VIEW vw_getfoo AS SELECT * FROM getfoo(1);
1691+
SELECT * FROM vw_getfoo;
1692+
</programlisting>
1693+
are all valid statements.
1694+
</para>
1695+
1696+
<para>
1697+
Currently, table functions are supported as SQL language functions
1698+
(<xref linkend="xfunc-sql">) and C language functions
1699+
(<xref linkend="xfunc-c">). See these individual sections for more
1700+
details.
1701+
</para>
1702+
1703+
</sect1>
16231704

16241705
<sect1 id="xfunc-plhandler">
16251706
<title>Procedural Language Handlers</title>

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp