代码改变世界

PL/pgSQL - SQL 过程语言

2013-04-03 15:19  好动的树懒  阅读(392)  评论(0编辑  收藏  举报

PL/pgSQL是一种块结构的语言。 函数定义的所有文本都必须是一个。 一个块用下面的方法定义:

[ <<label>> ]
[ DECLARE
    declarations ]          ---申明段
BEGIN
    statements        
END;

块中的每个声明和每条语句都是用一个分号终止的, 如果一个子块在另外一个块里,那么 END 后面必须有个分号,如上所述; 不过结束函数体的最后的 END 可以不要这个分号。

所有关键字和标识符都可以用混和大小写的方式来写。标识符被隐含地转换成小写字符,除非被双引号包围。

CREATE FUNCTION deleteData() returns int AS $$  /*创建一个名为 “deleteData()”的函数,“returns int”返回值为整形*/
DECLARE                
       a int;                            /*声明整形变量a和b,将b把赋值为1*/
     b int := 1;
    BEGIN                                /*statesments开始*/
     WHILE b<100 LOOP                        /*WHILE循环,当b<100执行循环中的语句*/
        SELECT INTO a status FROM t_user WHERE t_user_id = b;  /*将查询出来的status字段赋值给变量“a”,注意status字段在t_user表中定义为integer*/
        IF a = 999 THEN  /*if--else--结构语句,如果”status“等于“999”,即“a = 999“,则把这条记录从数据库中删除,否则什么都不做*/ 
            DELETE FROM t_user WHERE t_user_id = b;
            ELSE

            END IF;                                /*if--else--结束*/
        b = b + 1;                            /*b自增1*/
    END LOOP;                                /*WHILE循环结束*/
    return 0;                                /*返回一个整数,给函数deleteData(),函数结束*/
    END;                                    /*statesments结束*/
  $$ LANGUAGE plpgsql;

上面例子,查询用户表用户id小于100的记录,如果用户状态为‘999’,则将这条记录从数据库中删除。

将文件保存为 delete.sql

通过命令“psql -U用户名 -d 库名 -f 文件名”执行sql脚本文件

hsb@myoffice % psql -Uhsb -d hsb -f delete.sql 

CREATE FUNCTION         --创建函数成功


hsb@myoffice % psql -Uhsb    --进入数据库
psql (9.1.2)
Type "help" for help.

hsb=> select deleteData();           --通过select function()
deletedata               --执行结果返回0,操作成功
------------
0
(1 row)

hsb=>

hsb=> DROP FUNCTION deleteData();  --删除函数
DROP FUNCTION

具体可以参考postgresSQL参考手册

http://man.ddvip.com/database/PostgreSQL80zhref/