第十章. PL/pgSQL - SQL 程序語言

內容
概述
描述
例子
PL/pgSQL 是 Postgres 資料庫系統的一個可裝載的程序語言。
這個包最初是 Jan Wieck 寫的。

概述

PL/pgSQL 的設計目標是創建一種可裝載的程序語言,可以 PL/pgSQL 函數第一次被後端調用時,PL/pgSQL 的調用控制器分析函數源文本產生二進制指令樹。所產生的字節碼在調用控制器裡是用函數的對像標識來標記的。這樣就保証如果使用 DROP/CREATE 序列修改了函數,不需要建立一個新的資料庫聯接就能令修改生效。

對於函數裡用到的所有表達式和 SQL 語句,PL/pgSQL 字節碼解析器使用 SPI 管理器 SPI_prepare() 和 SPI_saveplan() 函數創建一個準備好了的執行規劃。這些動作是在(解析器)第一次處理時完成的,獨立的語句是在 PL/pgSQL 函數裡面處理的。因此,一個帶有條件程式碼的有許多語句的需要執行規劃的函數,將只準備和保存那些在整個資料庫聯接周期內真正使用到的規劃。

除了用於用戶定義型態的輸入/輸出轉換和計算函數以外,任何可以在 C 語言函數裡定義的東西都可以在 PL/pgSQL 裡使用。我們可以創建複雜的條件計算函數,並隨後將之用於定義符號或者用於函數索引中。