欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Greenplum的PL/pgSQL过程化语言

程序员文章站 2024-03-22 10:19:41
...

 

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;

 

 

相关标签: Greenplum

上一篇: 为Greenplum 增加mirror节点

下一篇: