PostgreSQL存储过程基础入门
一、存储过程结构:
Create or replace function 过程名(参数名 参数类型,…..) returns 返回值类型 as
$body$
//声明变量
Declare
变量名变量类型;
如:
flag Boolean;
变量赋值方式(变量名类型 :=值;)
如:
str text :=值; / str text; str :=值;
Begin
函数体;
return 变量名; //存储过程中的返回语句
End;
$body$
Language plpgsql;
二、变量类型 :
除了postgresql内置的变量类型外,常用的还有 RECORD ,表示一条记录。
整数数据类型:
子类型 |
标准名 |
描述 |
Smalll integer |
Smallint |
一个2字节的符号型整数,可以存储-32768到32767的数字 |
Integer |
Int |
一个4字节的符号型整数,可以存储-2147483648到2147473647的数字 |
Serial |
和integer一样,除了它的值通常是由PostgreSQL自动输入的。 |
浮点数据类型:(浮点数据也可以再细分,分为提供通用功能的浮点值和固定精度的数字)
子类型 |
标准名 |
描述 |
float |
float(n) |
支持最少精度为n,存储为最多8字节的浮点数。 |
float8 |
real |
双精度(8字节)浮点数字 |
numeric |
numeric(p,s) |
拥有p个数字的实数,其中小数点后有s位。不像float,这始终是一个确切的数字,但工作效率比普通浮点数字低。 |
money |
numeric(9,2) |
PostgreSQL特有的类型,但在其他数据库里也普遍存在。Money类型从PostgreSQL 8.0开始不赞成使用,且可能在以后版本中取消。你应该使用number类型代替。 |
注:
存储float和real类型的数据的行为非常相似,但是numeric列的行为有点不同。Numeric类型不是存储接近的数,而是在小数后面进行后超出固定长度的部分进行四舍五入。如果我们存储太大的数据到其中,INSERT将失败。还要注意float和real也会对数字四舍五入;例如123.456789被四舍五入为123.457。
时间数据类型:
定义 |
意义 |
date |
存储日期信息 |
time |
存储时间信息 |
timestamp |
存储日期和时间 |
interval |
存储timestamp之间差别的信息 |
timestamptz |
PostgreSQL扩展的类型,存储包含时区信息的timestamp |
特殊数据类型:
定义 |
意义 |
box |
矩形盒子 |
line |
一组点 |
point |
一对几何学的数字 |
lseg |
一条线段 |
polygon |
一条封闭的几何线 |
cidr或inet |
一个IPv4的地址,录入192.168.0.1 |
macaddr |
以MAC地址(以太网卡物理地址) |
注:PostgreSQL也允许你使用SQL命令CREATE TYPE在数据库中建立你自己的类型。这通常不需要,而且在一定程度上,它是PostgreSQL独有的。
数组
通常,一个数组需要通过使用一个附加表实现。但是,数组的能力有时候很有用。建立数组的方法有两种:传统的PostgreSQL的方法和SQL99标准的方法。
PostgreSQL样式的数组
要将一个表的列定义为数组,你可以简单地在类型后面添加[];不需要定义元素的个数。即使定义了个数,也不会强制要求存储的个数。Eg:
test=> CREATE TABLE empworkday (
test(> refcode char(5),
test(> workdays int[]
test(> );
往数组列中插入值:
test=> INSERT INTO empworkday VALUES(‘val01′,‘{0,1,0,1,1,1,1}’);
test=> INSERT INTO empworkday VALUES(‘val02′,‘{0,1,1,1,1,0,1}’);
SQL99样式的数字
在SQL99标准中,必须指出元素的个数。
Eg:
test=> CREATE TABLE empworkday (
test(> refcode char(5),
test(> workdays int array[7]
test(> );
test=> INSERT INTO empworkday VALUES(‘val01′,‘{0,1,0,1,1,1,1}’);
test=> INSERT INTO empworkday VALUES(‘val02′,‘{0,1,1,1,1,0,1}’);
三、连接字符:
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
[ <