Postgresql存储过程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用PL/pgSQL写postgreSQL的存储过程

一、存储过程结构:

Create or replace function 过程名(参数名参数类型,…..) returns 返回值类型as $body$

//声明变量

Declare

变量名变量类型;

如:

flag Boolean;

变量赋值方式(变量名类型:=值;)

如:

Str text :=值; / str text; str :=值;

Begin

函数体;

End;

$body$

Language plpgsql;

二、变量类型:

除了postgresql内置的变量类型外,常用的还有 RECORD ,表示一条记录

三、连接字符:

Postgresql存储过程中的连接字符不再是“+”,而是使用“||”。

四、控制结构:

1、if 条件(五种形式)

IF ... THEN

IF ... THEN ... ELSE

IF ... THEN ... ELSE IF

IF ... THEN ... ELSIF ... THEN ... ELSE

IF ... THEN ... ELSEIF ... THEN ... ELSE(注:ELSEIF 是 ELSIF 的别名)

2、循环

使用LOOP,EXIT,CONTINUE,WHILE,和 FOR 语句,可以控制PL/pgSQL 函数重复一系列命令。

1)、LOOP

[ <

LOOP

statements

END LOOP [ label ];

LOOP 定义一个无条件的循环,无限循环,直到由EXIT或者RETURN语句终止。可选的label可以由 EXIT 和 CONTINUE 语句使用,用于在嵌套循环中声明应该应用于哪一层循环。

2)、EXIT

EXIT [ label ] [ WHEN expression ];

如果没有给出label,那么退出最内层的循环,然后执行跟在 END LOOP 后面的语句。如果给出label,那么它必须是当前或者更高层的嵌套循环块或者语句块的标签。然后该命名块或者循环就会终止,而控制落到对应循环/块的 END 语句后面的语句上。

如果声明了WHEN,循环退出只有在expression为真的时候才发生,否则控制会落到 EXIT 后面的语句上。

EXIT 可以用于在所有的循环类型中,它并不仅仅限制于在无条件循环中使用。在和 BEGIN 块一起使用的时候,EXIT 把控制交给块结束后的下一个语句。

例如:

Loop 循环

If … then 条件判断

Exit ; 条件成立,则退出循环。

End if;

End loop;

3)、CONTINUE

CONTINUE [ label ] [ WHEN expression ];

如果没有给出label,那么就开始最内层的循环的下一次执行。也就是说,控制传递回给循环控制表达式(如果有),然后重新计算循环体。如果出现了label,它声明即将继续执行的循环的标签。

如果声明了 WHEN,那么循环的下一次执行只有在expression为真的情况下才进行。否则,控制传递给 CONTINUE 后面的语句。

CONTINUE 可以用于所有类型的循环;它并不仅仅限于无条件循环。

例如:

LOOP

一些计算

EXIT WHEN count > 100;

CONTINUE WHEN count < 50;

一些在count 数值在 [50 .. 100] 里面时候的计算

END LOOP;

4)、WHILE

[ <

WHILE expression LOOP

statements

END LOOP [ label ];

只要条件表达式为真,WHILE语句就会不停在一系列语句上进行循环. 条件是在每次进入循环体的时候检查的.

例如:

WHILE amount_owed > 0 AND gift_certificate_balance > 0 LOOP

-- 可以在这里做些计算

END LOOP;

WHILE NOT BOOLEAN_expression LOOP

-- 可以在这里做些计算

END LOOP;

5)、FOR (整数变种)

[ <

FOR name IN [ REVERSE ] expression .. expression LOOP

statements

END LOOP [ labal ];

这种形式的FOR对一定范围的整数数值进行迭代的循环。变量name会自动定义为integer类型并且只在循环里存在。给出范围上下界的两个表达式在进入循环的时候计算一次。迭代步进值总是为 1,但如果声明了REVERSE就是 -1。

一些整数FOR循环的例子∶

FOR i IN 1..10 LOOP 表示1循环到10

这里可以放一些表达式

RAISE NOTICE 'i IS %', i;

END LOOP;

FOR i IN REVERSE 10..1 LOOP

这里可以放一些表达式

END LOOP;

如果下界大于上界(或者是在 REVERSE 情况下是小于),那么循环体将完

全不被执行。而且不会抛出任何错误。

3、异常捕获

EXCEPTION

WHEN 错误码(如:STRING_DATA_RIGHT_TRUNCATION:字串数据右边被截断)

THEN

/**后台打印错误信息*/

RAISE NOTICE '错吴信息';

附件含有实例代码

相关文档
最新文档