基于PL/PgSQL的存储过程定义

/**
PL/pgSQL是一个块结构语言。函数定义的所有文本都必须是一个块。
中括号部分为可选部分
块中的每一个declaration和每一条statement都由一个分号终止
块支持嵌套,嵌套时子块的END后面必须跟一个分号,最外层的块END后可不跟分号
BEGIN后面不必也不能跟分号
END后跟的label名必须和块开始时的标签名一致
所有关键字都不区分大小写。标识符被隐含地转换成小写字符,除非被双引号包围
声明的变量在当前块及其子块中有效,子块开始前可声明并覆盖(只在子块内覆盖)外部块的同名变量
变量被子块中声明的变量覆盖时,子块可以通过外部块的label访问外部块的变量

**/

--raise notice 可以调试存储过程,用select 来调用存储过程

CREATE or replace FUNCTION somefunc() RETURNS integer AS $$
DECLARE
    fid integer := 30;
BEGIN
    -- Prints 30
    RAISE NOTICE Quantity here is %, fid;
    fid := 50;

    -- Create a subblock
    DECLARE
        fid integer := 80;
    BEGIN
        -- Prints 80
        RAISE NOTICE Quantity here is %, fid;
        -- Prints 50
        RAISE NOTICE Outer quantity here is %, fid;
    END;

    -- Prints 50
    RAISE NOTICE Quantity here is %, fid;
    RETURN fid;
E
/** PL/pgSQL是一个块结构语言。函数定义的所有文本都必须是一个块。 中括号部分为可选部分 块中的每一个declaration和每一条statement都由一个分号终止 块支持嵌套,嵌套时子块的END后面必须跟一个分号,最外层的块END后可不跟分号 BEGIN后面不必也不能跟分号 END后跟的label名必须和块开始时的标签名一致 所有关键字都不区分大小写。标识符被隐含地转换成小写字符,除非被双引号包围 声明的变量在当前块及其子块中有效,子块开始前可声明并覆盖(只在子块内覆盖)外部块的同名变量 变量被子块中声明的变量覆盖时,子块可以通过外部块的label访问外部块的变量 **/ --raise notice 可以调试存储过程,用select 来调用存储过程 CREATE or replace FUNCTION somefunc() RETURNS integer AS $$ DECLARE fid integer := 30; BEGIN -- Prints 30 RAISE NOTICE Quantity here is %, fid; fid := 50; -- Create a subblock DECLARE fid integer := 80; BEGIN -- Prints 80 RAISE NOTICE Quantity here is %, fid; -- Prints 50 RAISE NOTICE Outer quantity here is %, fid; END; -- Prints 50 RAISE NOTICE Quantity here is %, fid; RETURN fid; E
经验分享 程序员 微信小程序 职场和发展