视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Postgresql存储过程
2025-09-29 00:19:43 责编:小OO
文档
用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 '错吴信息';

附件含有实例代码下载本文

显示全文
专题