41.1. Overview | ||||
---|---|---|---|---|
Prev | Up | Chapter 41. PL/pgSQL —SQL Procedural Language | Home | Next |
41.1. Overview#
PL/pgSQL is a loadable procedural language for thePostgreSQL database system. The design goals ofPL/pgSQL were to create a loadable procedural language that
can be used to create functions, procedures, and triggers,
adds control structures to theSQL language,
inherits all user-defined types, functions, procedures, and operators,
SQL is the languagePostgreSQL and most other relational databases use as query language. It's portable and easy to learn. But everySQL statement must be executed individually by the database server.
Also, withPL/pgSQL you can use all the data types, operators and functions of SQL.
Functions written inPL/pgSQL can accept as arguments any scalar or array data type supported by the server, and they can return a result of any of these types. They can also accept or return any composite type (row type) specified by name. It is also possible to declare aPL/pgSQL function as acceptingrecord
, which means that any composite type will do as input, or as returningrecord
, which means that the result is a row type whose columns are determined by specification in the calling query, as discussed inSection 7.2.1.4.
PL/pgSQL functions can be declared to accept a variable number of arguments by using theVARIADIC
marker. This works exactly the same way as for SQL functions, as discussed inSection 36.5.6.
PL/pgSQL functions can also be declared to accept and return the polymorphic types described inSection 36.2.5, thus allowing the actual data types handled by the function to vary from call to call. Examples appear inSection 41.3.1.
PL/pgSQL functions can also be declared to return a“set” (or table) of any data type that can be returned as a single instance. Such a function generates its output by executingRETURN NEXT
for each desired element of the result set, or by usingRETURN QUERY
to output the result of evaluating a query.
Finally, aPL/pgSQL function can be declared to returnvoid
if it has no useful return value. (Alternatively, it could be written as a procedure in that case.)
PL/pgSQL functions can also be declared with output parameters in place of an explicit specification of the return type. This does not add any fundamental capability to the language, but it is often convenient, especially for returning multiple values. TheRETURNS TABLE
notation can also be used in place ofRETURNS SETOF
.
Specific examples appear inSection 41.3.1 andSection 41.6.1.
Prev | Up | Next |
Chapter 41. PL/pgSQL —SQL Procedural Language | Home | 41.2. Structure ofPL/pgSQL |