↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 7.3 / 7.2 / 7.1
历史版本PostgreSQL 7.1 已于 2006 年 4 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

24.4. 示例 #

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

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

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

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

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

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

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

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

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

例 24.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';

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。