Greenplum的PL/pgSQL过程化语言

 

1.关于Greenplum的PL/pgSQL

Greenplum数据库的PL/pgSQL是一种可加载的过程化语言, Greenplum数据库中已经默认安装和注册了改语言。用户可以使用SQL语句,函数和操作符来创建自定义函数。

PL/pgSQL是Oracle的PL/SQL的子集,Greenplum的PL/pgSQL是基于Postgres的PL/pgSQL的。

1.1Greenplum数据库的SQL局限性

当使用Greenplum的PL/pgSQL时,主要的限制如下:

  1. 不支持触发器
  2. 游标只支持向前移动
  3. 不支持可更新的游标(UPDATE...WHERE CURRENT OF 和 DELETE...WHERE CURRENT OF))

1.2PL/pgSQL语言

PL/pgSQL是一种块状的过程化语言,一个函数定义的完整文本必须是一个块,块的定义如下:

        [ <<label>> ]

        [ DECLARE

          declarations ]

        BEGIN

          statements

        END [ label ];

  如果要在EXIT语句中识别块,或者使用块中声明的变量的全限定名,可以使用label。如果END语句之后跟label,该label必须匹配开始的label。

每一个在块内部的declaration和statement需要以分号(;)结尾,在一个块内部的另一个块必须在END后面加分号。

注意:不要将数据库中事务的BEGIN和END关键字与PL/pgSQL中的BEGIN和END关键字混淆。在PL/PGSQL中BEGIN和END关键字仅仅为了分组,并不是开启和关闭一个事务。

所有的关键字和标识符可以写成大写和小写的混合形式,标识符会隐式转换为小写的,除非使用双引号引起来。

可以在PL/pgSQL中使用注释

单行注释:--

块注释:/*   */

CREATE FUNCTION somefunc() RETURNS integer AS $$
<< outerblock >>
DECLARE
    quantity integer := 30;
BEGIN
    RAISE NOTICE 'Quantity here is %', quantity;  -- Prints 30
    quantity := 50;
    --
    -- Create a subblock
    --
    DECLARE
        quantity integer := 80;
    BEGIN
        RAISE NOTICE 'Quantity here is %', quantity;  -- Prints 80
        RAISE NOTICE 'Outer quantity here is %', outerblock.quantity;  -- Prints 50
    END;

    RAISE NOTICE 'Quantity here is %', quantity;  -- Prints 50

    RETURN quantity;
END;
$$ LANGUAGE plpgsql;

2.例子

有两种方式创建别名,其中比较好的方式是在创建函数时给出具体的参数名称,比如:

CREATE FUNCTION sales_tax(subtotal real) RETURNS real AS $$

BEGIN

RETURN subtotal * 0.06;

END;

$$ LANGUAGE plpgsql;

也可以显示声明一个别名,语法如下:

name ALIAS FOR $n;

使用Declare语法创建语上述相同的函数

CREATE FUNCTION sales_tax(real) RETURNS real AS $$

DECLARE

subtotal ALIAS FOR $1;

BEGIN

RETURN subtotal * 0.06;

END;

$$ LANGUAGE plpgsql;

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值