39.1. Overview | ||||
---|---|---|---|---|
Prev | Up | Chapter 39. PL/pgSQL -SQL Procedural Language | Home | Next |
39.1. Overview
PL/pgSQL is a loadable procedural language for thePostgres Pro database system. The design goals ofPL/pgSQL were to create a loadable procedural language that
can be used to create functions and trigger procedures,
adds control structures to theSQL language,
SQL is the languagePostgres Pro 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 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 34.4.5.
PL/pgSQL functions can also be declared to accept and return the polymorphic typesanyelement
,anyarray
,anynonarray
,anyenum
, andanyrange
. The actual data types handled by a polymorphic function can vary from call to call, as discussed inSection 34.2.5. An example is shown inSection 39.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.
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 39.3.1 andSection 39.6.1.