热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用PL/pgSQL写PostgreSQL的存储过程

用PLpgSQL写PostgreSQL的存储过程用PLpgSQL写PostgreSQL的存储过程一、存储过程结构:二、变量类型:三、连接字符࿱

用PL/pgSQL写PostgreSQL的存储过程

  • 用PL/pgSQL写PostgreSQL的存储过程
    • 一、存储过程结构:
    • 二、变量类型 :
    • 三、连接字符:
    • 四、 控制结构:
      • 1、if 条件(五种形式)
      • 2、循环
          • 1)、LOOP
          • 2)、EXIT
          • 3)、CONTINUE
          • 4)、WHILE
          • 5)、FOR (整数变种)
      • 3、异常捕获


用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

[ <<label>> ]
LOOPstatements
END LOOP [ label ];

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

2&#xff09;、EXIT

EXIT [ label ] [ WHEN expression ];

如果没有给出 label&#xff0c; 那么退出最内层的循环&#xff0c;然后执行跟在 END LOOP 后面的语句。 如果给出 label&#xff0c; 那么它必须是当前或者更高层的嵌套循环块或者语句块的标签。 然后该命名块或者循环就会终止&#xff0c;而控制落到对应循环/块的 END 语句后面的语句上。
如果声明了WHEN&#xff0c;循环退出只有在 expression 为真的时候才发生&#xff0c; 否则控制会落到 EXIT 后面的语句上。
EXIT 可以用于在所有的循环类型中&#xff0c;它并不仅仅限制于在无条件循环中使用。 在和 BEGIN 块一起使用的时候&#xff0c;EXIT 把控制交给块结束后的下一个语句。
例如:

Loop 循环
Ifthen 条件判断Exit ; 条件成立&#xff0c;则退出循环。
End if;
End loop;

3&#xff09;、CONTINUE

CONTINUE [ label ] [ WHEN expression ];

如果没有给出 label&#xff0c;那么就开始最内层的循环的下一次执行。 也就是说&#xff0c;控制传递回给循环控制表达式&#xff08;如果有&#xff09;&#xff0c;然后重新计算循环体。 如果出现了 label&#xff0c;它声明即将继续执行的循环的标签。
如果声明了 WHEN&#xff0c;那么循环的下一次执行只有在 expression 为真的情况下才进行。否则&#xff0c;控制传递给 CONTINUE 后面的语句。
CONTINUE 可以用于所有类型的循环&#xff1b; 它并不仅仅限于无条件循环。
例如:

LOOP一些计算EXIT WHEN count > 100;CONTINUE WHEN count < 50;一些在count 数值在 [50 .. 100] 里面时候的计算
END LOOP;

4&#xff09;、WHILE

[ <<label>> ]
WHILE expression LOOPstatements
END LOOP [ label ];

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

WHILE amount_owed > 0 AND gift_certificate_balance > 0 LOOP-- 可以在这里做些计算
END LOOP;--------------------------### -----------------------------------WHILE NOT BOOLEAN_expression LOOP-- 可以在这里做些计算
END LOOP;

5&#xff09;、FOR &#xff08;整数变种&#xff09;

[ <<label>> ]
FOR name IN [ REVERSE ] expression .. expression LOOPstatements
END LOOP [ labal ];

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

FOR i IN 1..10 LOOP --表示1循环到10-- 这里可以放一些表达式RAISE NOTICE &#39;i IS %&#39;, i;
END LOOP;

FOR i IN REVERSE 10..1 LOOP这里可以放一些表达式
END LOOP;

如果下界大于上界&#xff08;或者是在 REVERSE 情况下是小于&#xff09;&#xff0c;那么循环体将完全不被执行。 而且不会抛出任何错误。

3、异常捕获

EXCEPTION

WHEN 错误码&#xff08;如&#xff1a;STRING_DATA_RIGHT_TRUNCATION&#xff1a;字串数据右边被截断&#xff09; THEN/**后台打印错误信息*/RAISE NOTICE &#39;错吴信息&#39;;


推荐阅读
author-avatar
b87968557
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有