↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

已结束支持的版本: 7.3 / 7.2 / 7.1
历史版本。 PostgreSQL 7.2 已结束支持。 请参阅 当前版本手册.

23.10. 示例 #

这里只有几个函数用来展示编写PL/pgSQL函数有多么容易。想要更复杂的例子,程序员可以去看 PL/pgSQL的回归测试。

在PL/pgSQL中编写函数的一个令人头疼的细节是单引号的处理。CREATE FUNCTION 中函数的源文本必须是一个字面量字符串。字面量字符串内部的单引号必须加倍或者用反斜杠引用。我们仍在寻找优雅的替代方案。在此期间,应当像下面的例子那样把单引号加倍。PostgreSQL未来版本中对这一问题的任何解决方案都将是向前兼容的。

有关在不同情况下如何转义单引号的详细解释和例子,请参阅第 23.11.1.1 节。

例 23.2. 一个让整数加一的简单PL/pgSQL函数

下面两个PL/pgSQL函数与 C 语言函数讨论中的对应函数完全相同。这个函数接收一个integer 并让它加一,返回加一后的值。

CREATE FUNCTION add_one (integer) RETURNS INTEGER AS '
    BEGIN
        RETURN $1 + 1;
    END;
' LANGUAGE 'plpgsql';

例 23.3. 一个连接文本的简单PL/pgSQL函数

这个函数接收两个text参数并返回它们连接后的结果。

CREATE FUNCTION concat_text (TEXT, TEXT) RETURNS TEXT AS '
    BEGIN
        RETURN $1 || $2;
    END;
' LANGUAGE 'plpgsql';

例 23.4. 一个操作复合类型的PL/pgSQL函数

在这个例子中,我们把EMP(一张表)和一个 integer作为函数的参数,函数返回一个 boolean。如果EMP表的 salary字段为NULL,我们返回f。否则我们拿该字段与传给函数的 integer比较,并返回比较的boolean 结果(t 或 f)。这是 C 函数中那个例子在 PL/pgSQL中的等价物。

CREATE FUNCTION c_overpaid (EMP, INTEGER) RETURNS BOOLEAN AS '
    DECLARE
        emprec ALIAS FOR $1;
        sallim ALIAS FOR $2;
    BEGIN
        IF emprec.salary ISNULL THEN
            RETURN ''f'';
        END IF;
        RETURN emprec.salary > sallim;
    END;
' LANGUAGE 'plpgsql';

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.