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/