Postgresql 从小白到高手 八 – PL/pgSQL 存储过程
第八章:PL/pgSQL 存储过程
`
文章目录
一、过程语言
PostgreSQL允许使用除了 SQL 和 C 之外的其他语言编写用户定义的函数。这些其他的语言通常被称作过程语言(PL)。
四种过程语言可用: PL/pgSQL、 PL/Tcl、 PL/Perl 以及 PL/Python。
PL/pgsql 是内置安装的,其他过程语言需要扩展安装。
二 、PL/pgSQL 函数
1.PL/pgSQL语言结构
[ <<label>> ]
[ DECLARE
declarations ]
BEGIN
statements
END [ label ];
同级语句,缩进格数一致。执行顺序从上到下,从同级别到下级,从左到右。
2.创建
关键方法词:
2.1 DECLARE : 申明变量
一个变量声明的一般语法是:
name [ CONSTANT ] type [ COLLATE collation_name ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];
如果给定DEFAULT子句,它会指定进入该块时分 配给该变量的初始值。如果没有给出DEFAULT子句, 则该变量被初始化为SQL空值。 CONSTANT选项阻止该变量在初始化之后被赋值, 这样它的值在块的持续期内保持不变。COLLATE 选项指定用于该变量的一个排序规则。如果指 定了NOT NULL,对该变量赋值为空值会导致一个 运行时错误。所有被声明为NOT NULL的变量必须 被指定一个非空默认值。 等号(=)可以被用来代替 PL/SQL-兼容的 :=。
DECLARE pdid integer := 30;
申明函数变量:
传递给函数的参数被命名为标识符$1、 2 等等。可选地,能够为 2等等。可选地,能够为 2等等。可选地,能够为n参数名声明别名来增加可读性。不管是别名还是数字标识符都能用来引用参数值。
CREATE FUNCTION sales_tax(real) RETURNS real AS $$
DECLARE
subtotal ALIAS FOR $1;
BEGIN
RETURN subtotal * 0.06;
END;
$$ LANGUAGE plpgsql;
2.2 RETURNS 输出
输出变量 :RETURNS text
RETURNS TABLE :输出记录
CREATE FUNCTION extended_sales(p_itemno int)
RETURNS TABLE(quantity int, total numeric) AS $$
BEGIN
RETURN QUERY SELECT s.quantity, s.quantity * s.price FROM sales AS s
WHERE s.itemno = p_itemno;
END;
$$ LANGUAGE plpgsql;
调用带有 OUT 参数的函数, 在函数调用中省略输出参数:
CREATE FUNCTION sales_tax(subtotal real, OUT tax real) AS $$
BEGIN
tax := subtotal * 0.06;
END;
$$ LANGUAGE plpgsql;
调用存储过程出参可定义为null


6042

被折叠的 条评论
为什么被折叠?



