Chapter 39. PL/pgSQL - SQL Procedural Language

Table of Contents
39.1. Overview
39.1.1. Advantages of Using PL/pgSQL
39.1.2. Supported Argument and Result Data Types
39.2. Structure of PL/pgSQL
39.3. Declarations
39.3.1. Declaring Function Parameters
39.3.2. ALIAS
39.3.3. Copying Types
39.3.4. Row Types
39.3.5. Record Types
39.3.6. Collation of PL/pgSQL Variables
39.4. Expressions
39.5. Basic Statements
39.5.1. Assignment
39.5.2. Executing a Command With No Result
39.5.3. Executing a Query with a Single-row Result
39.5.4. Executing Dynamic Commands
39.5.5. Obtaining the Result Status
39.5.6. Doing Nothing At All
39.6. Control Structures
39.6.1. Returning From a Function
39.6.2. Conditionals
39.6.3. Simple Loops
39.6.4. Looping Through Query Results
39.6.5. Looping Through Arrays
39.6.6. Trapping Errors
39.7. Cursors
39.7.1. Declaring Cursor Variables
39.7.2. Opening Cursors
39.7.3. Using Cursors
39.7.4. Looping Through a Cursor's Result
39.8. Errors and Messages
39.9. Trigger Procedures
39.9.1. Triggers on data changes
39.9.2. Triggers on events
39.10. PL/pgSQL Under the Hood
39.10.1. Variable Substitution
39.10.2. Plan Caching
39.11. Tips for Developing in PL/pgSQL
39.12. Porting from Oracle PL/SQL
39.12.1. Porting Examples
39.12.2. Other Things to Watch For
39.12.3. Appendix