Postgresql函数总结
来源:互联网 发布:英文语音朗读软件 编辑:程序博客网 时间:2024/06/06 03:56
在PG中,函数在别的数据库里可能也被称为存储过程,他支持四种语言可用:PL/PGSQL,PL/TCL,PL/PERL,PL/PYTHON.
它有着固定的语法格式和前缀后缀:
http://www.phpx.com/man/Pgsql/plpgsql.html
例子如下:
CREATE OR REPLACE FUNCTION nvsdm.fn_fiscal_year(IN quarter_num integer)
RETURNS TABLE(fiscal_year integer, quarter integer, start_date timestamp with time zone, end_date timestamp with time zone) AS
$BODY$
DECLARE num integer;
DECLARE current DATE;
DECLARE year integer;
DECLARE month integer;
DECLARE fiscal_year integer;
DECLARE quarter integer;
BEGIN
。
。
。
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION nvsdm.fn_fiscal_year(integer)
OWNER TO sys_sdm;
1.如果函数的返回值是一个TABLE,则函数中必须有RETURN QUERY SELECT ...的写法,用来返回值。如
RETURN QUERY SELECT fiscal_year,quarter,current::timestamp with time zone,(current+INTERVAL '3 month'-INTERVAL '1 second')::timestamp with time zone;
如果返回值是一个TEST,则除了定义的时候要注意
declare rs text;
在返回值是应该为
return rs;
2.注意函数体中简单循环的写法,其中较为常见的为
whiel{expression} Loop
..
End Loop
贴上一个可以根据大小返回季度起始的函数
-- Function: nvsdm.fn_fiscal_year(integer)
-- DROP FUNCTION nvsdm.fn_fiscal_year(integer);
CREATE OR REPLACE FUNCTION nvsdm.fn_fiscal_year(IN quarter_num integer)
RETURNS TABLE(fiscal_year integer, quarter integer, start_date timestamp with time zone, end_date timestamp with time zone) AS
$BODY$
DECLARE num integer;
DECLARE current DATE;
DECLARE year integer;
DECLARE month integer;
DECLARE fiscal_year integer;
DECLARE quarter integer;
BEGIN
num := quarter_num;
current := NOW();
year := date_part('year', current)::integer;
month := date_part('month', current)::integer;
IF month = 1 THEN fiscal_year := mod(year,100); year := year-1; month := 11; quarter := 4;
ELSEIF month >= 2 AND month <= 4 THEN fiscal_year := mod(year+1,100); month := 2; quarter := 1;
ELSEIF month >= 5 AND month <= 7 THEN fiscal_year := mod(year+1,100); month := 5; quarter := 2;
ELSEIF month >= 8 AND month <= 10 THEN fiscal_year := mod(year+1,100); month := 8; quarter := 3;
ELSE fiscal_year := mod(year+1,100); month := 11; quarter := 4;
END IF;
current := date(year||'-'||month||'-01');
WHILE num > 0 AND fiscal_year >= 0 LOOP
RETURN QUERY SELECT fiscal_year,quarter,current::timestamp with time zone,(current+INTERVAL '3 month'-INTERVAL '1 second')::timestamp with time zone;
current := current-INTERVAL '3 month';
quarter := quarter-1;
IF quarter = 0 THEN
fiscal_year := fiscal_year-1;
quarter := 4;
END IF;
num := num-1;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION nvsdm.fn_fiscal_year(integer)
OWNER TO sys_sdm;
- Postgresql函数总结
- postgresql 函数
- postgreSQL函数
- PostgreSQL-函数
- postgresql函数
- Postgresql 函数
- postgresql问题总结
- postgresql数据库 部分总结
- PostgreSQL 安装,使用总结
- postgreSQL 命令总结
- postgresql 解锁表总结
- PostgreSQL UUID 函数
- PostgreSQL substring()函数
- PostgreSQL字符串处理函数
- PostgreSQL函数用法
- postgreSQL常用函数
- postgresql常用函数汇总
- memo:PostgreSQL字符串函数
- 面向金融领域的文本情感分析 笔记
- Android开发 windows中的工程导入到linux中 Eclipse中乱码解决方案
- mac eclipse 阿拉伯语
- Table is marked as crashed and should be repaire 解决方法
- Exception in thread "main" org.hibernate.MappingException: Unknown entity:
- Postgresql函数总结
- 浅析C++的多态机制
- u-boot向linux内核传递启动参数(详细)
- utf与gb2312互转的C代码
- apk安装后不在桌面上生成快捷图标
- new begin
- IE8手动修改搜索提供程序
- 内存管理内幕
- Hadoop权威指南实践--第二章