# Chapter 43. PL/pgSQL — SQL Procedural Language
Table of Contents
43.1.1. Advantages of Using PL/pgSQL
43.1.2. Supported Argument and Result Data Types
43.3.1. Declaring Function Parameters
43.3.6. Collation of PL/pgSQL Variables
43.5.2. Executing SQL Commands
43.5.3. Executing a Command with a Single-Row Result
43.5.4. Executing Dynamic Commands
43.5.5. Obtaining the Result Status
43.6.1. Returning from a Function
43.6.2. Returning from a Procedure
43.6.6. Looping through Query Results
43.6.7. Looping through Arrays
43.6.9. Obtaining Execution Location Information
43.7.1. Declaring Cursor Variables
43.7.4. Looping through a Cursor's Result
43.9.1. Reporting Errors and Messages
43.10.1. Triggers on Data Changes
43.11. PL/pgSQL under the Hood
43.11.1. Variable Substitution
43.12. Tips for Developing in PL/pgSQL
43.12.1. Handling of Quotation Marks
43.12.2. Additional Compile-Time and Run-Time Checks
43.13. Porting from Oracle PL/SQL