大约 2 分钟
Chapter 43. PL/pgSQL - SQL Procedural Language
Table of Contents
43.1. Overview : 43.1.1. Advantages of Using PL/pgSQL
[43.1.2. Supported Argument and Result Data Types](plpgsql-overview.md#PLPGSQL-ARGS-RESULTS)
43.3. Declarations : 43.3.1. Declaring Function Parameters
[43.3.2. `ALIAS`](plpgsql-declarations.md#PLPGSQL-DECLARATION-ALIAS)
[43.3.3. Copying Types](plpgsql-declarations.md#PLPGSQL-DECLARATION-TYPE)
[43.3.4. Row Types](plpgsql-declarations.md#PLPGSQL-DECLARATION-ROWTYPES)
[43.3.5. Record Types](plpgsql-declarations.md#PLPGSQL-DECLARATION-RECORDS)
[43.3.6. Collation of PL/pgSQL Variables](plpgsql-declarations.md#PLPGSQL-DECLARATION-COLLATION)
43.5. Basic Statements : 43.5.1. Assignment
[43.5.2. Executing a Command With No Result](plpgsql-statements.md#PLPGSQL-STATEMENTS-SQL-NORESULT)
[43.5.3. Executing a Query with a Single-row Result](plpgsql-statements.md#PLPGSQL-STATEMENTS-SQL-ONEROW)
[43.5.4. Executing Dynamic Commands](plpgsql-statements.md#PLPGSQL-STATEMENTS-EXECUTING-DYN)
[43.5.5. Obtaining the Result Status](plpgsql-statements.md#PLPGSQL-STATEMENTS-DIAGNOSTICS)
[43.5.6. Doing Nothing At All](plpgsql-statements.md#PLPGSQL-STATEMENTS-NULL)
43.6. Control Structures : 43.6.1. Returning From a Function
[43.6.2. Returning From a Procedure](plpgsql-control-structures.md#PLPGSQL-STATEMENTS-RETURNING-PROCEDURE)
[43.6.3. Calling a Procedure](plpgsql-control-structures.md#PLPGSQL-STATEMENTS-CALLING-PROCEDURE)
[43.6.4. Conditionals](plpgsql-control-structures.md#PLPGSQL-CONDITIONALS)
[43.6.5. Simple Loops](plpgsql-control-structures.md#PLPGSQL-CONTROL-STRUCTURES-LOOPS)
[43.6.6. Looping Through Query Results](plpgsql-control-structures.md#PLPGSQL-RECORDS-ITERATING)
[43.6.7. Looping Through Arrays](plpgsql-control-structures.md#PLPGSQL-FOREACH-ARRAY)
[43.6.8. Trapping Errors](plpgsql-control-structures.md#PLPGSQL-ERROR-TRAPPING)
[43.6.9. Obtaining Execution Location Information](plpgsql-control-structures.md#PLPGSQL-CALL-STACK)
43.7. Cursors : 43.7.1. Declaring Cursor Variables
[43.7.2. Opening Cursors](plpgsql-cursors.md#PLPGSQL-CURSOR-OPENING)
[43.7.3. Using Cursors](plpgsql-cursors.md#PLPGSQL-CURSOR-USING)
[43.7.4. Looping Through a Cursor's Result](plpgsql-cursors.md#PLPGSQL-CURSOR-FOR-LOOP)
43.9. Errors and Messages : 43.9.1. Reporting Errors and Messages
[43.9.2. Checking Assertions](plpgsql-errors-and-messages.md#PLPGSQL-STATEMENTS-ASSERT)
43.10. Trigger Functions : 43.10.1. Triggers on Data Changes
[43.10.2. Triggers on Events](plpgsql-trigger.md#PLPGSQL-EVENT-TRIGGER)
43.11. PL/pgSQL Under the Hood : 43.11.1. Variable Substitution
[43.11.2. Plan Caching](plpgsql-implementation.md#PLPGSQL-PLAN-CACHING)
43.12. Tips for Developing in PL/pgSQL : 43.12.1. Handling of Quotation Marks
[43.12.2. Additional Compile-time Checks](plpgsql-development-tips.md#PLPGSQL-EXTRA-CHECKS)
43.13. Porting from Oracle PL/SQL : 43.13.1. Porting Examples
[43.13.2. Other Things to Watch For](plpgsql-porting.md#PLPGSQL-PORTING-OTHER)
[43.13.3. Appendix](plpgsql-porting.md#PLPGSQL-PORTING-APPENDIX)
