DECLARE
curParkingTime TIMESTAMP ;
curLeavingTime TIMESTAMP;
parkingSpaceIndexCode VARCHAR[]; days INTEGER; --间隔天数
duration INTEGER; -- 停车时长
i INTEGER;
plateNo VARCHAR; -- 车牌号
BEGIN
curLeavingTime = $2;
--RAISE INFO ' aaa aaa';
--获取indexcode数组
select ARRAY_AGG(indexcode) INTO parkingSpaceIndexCode from pms_parkingspace;
if (array_length(parkingSpaceIndexCode, 1)>0) then
i :=0;
WHILE i < $1 LOOP
i := i+1;
for index in 1..array_length(parkingSpaceIndexCode, 1) loop
--得到停车时长和车牌5位随机数
select '浙A'|| trunc(random() * (99999-10000 + 1) + 10000) into plateNo;
duration = cast (random()*1000 as INTEGER);
--使leavingtime随机
curLeavingTime = curLeavingTime + cast(cast (random()*100 as INTEGER)|| 'min' as INTERVAL);
--leavingtime减去duration得到parkingtime
curParkingTime = curLeavingTime - cast( duration || 'min' as INTERVAL) ;
--RAISE NOTICE 'indexCode is %,plateNo is %',parkingSpaceIndexCode[index],plateNo;
INSERT INTO pms_parking_space_history(space_index_code,parking_time,leaving_time,parking_duration,plate_no) values(parkingSpaceIndexCode[index],curParkingTime,curLeavingTime,duration,plateNo); end loop; --使下次循环的日期递减
curLeavingTime = curParkingTime - INTERVAL '1 day'; END LOOP;
end if;
END;

执行

select generate_history_data(2, '2016-11-30 10:10:00')

导出后的建函数语句:

CREATE OR REPLACE FUNCTION "public"."generate_history_data(loopcounts int4, enddate timestamp)"(loopcounts int4, enddate timestamp)
RETURNS "pg_catalog"."void" AS $BODY$
DECLARE
curParkingTime TIMESTAMP ;
curLeavingTime TIMESTAMP;
parkingSpaceIndexCode VARCHAR[]; days INTEGER; --间隔天数
duration INTEGER; -- 停车时长
i INTEGER;
plateNo VARCHAR; -- 车牌号
BEGIN
curLeavingTime = $2;
--RAISE INFO ' aaa aaa';
--获取indexcode数组
select ARRAY_AGG(indexcode) INTO parkingSpaceIndexCode from pms_parkingspace;
if (array_length(parkingSpaceIndexCode, 1)>0) then
i :=0;
WHILE i < $1 LOOP
i := i+1;
for index in 1..array_length(parkingSpaceIndexCode, 1) loop
--得到停车时长和车牌5位随机数
select '浙A'|| trunc(random() * (99999-10000 + 1) + 10000) into plateNo;
duration = cast (random()*1000 as INTEGER);
--使leavingtime随机
curLeavingTime = curLeavingTime + cast(cast (random()*100 as INTEGER)|| 'min' as INTERVAL);
--leavingtime减去duration得到parkingtime
curParkingTime = curLeavingTime - cast( duration || 'min' as INTERVAL) ;
--RAISE NOTICE 'indexCode is %,plateNo is %',parkingSpaceIndexCode[index],plateNo;
INSERT INTO pms_parking_space_history(space_index_code,parking_time,leaving_time,parking_duration,plate_no) values(parkingSpaceIndexCode[index],curParkingTime,curLeavingTime,duration,plateNo); end loop; --使下次循环的日期递减
curLeavingTime = curParkingTime - INTERVAL '1 day'; END LOOP;
end if;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE COST 100
; ALTER FUNCTION "public"."generate_history_data(loopcounts int4, enddate timestamp)"(loopcounts int4, enddate timestamp) OWNER TO "postgres";

PostgreSql 函数的更多相关文章

  1. postgresql 函数 参数为复合类型

    postgresql没有存储过程,但是函数功能很强大. 在近期开发的电商管理平台中,对于产品的类目管理,设计时有个属性字段,设为字符数组,但是EF不支持数组的操作,所以在添加和修改类目时,需要对属性的 ...

  2. PostgreSQL自学笔记:6 PostgreSQL函数

    6 PostgreSQL函数 6.2 数学函数 abs(x) 绝对值 pi() 圆周率π select abs(-3),pi(); cookie: MySQL中的pi()默认值3.141593, Po ...

  3. PostgreSQL函数(存储过程)----笔记

    PostgreSQL 函数也称为 PostgreSQL 存储过程. PostgreSQL 函数或存储过程是存储在数据库服务器上并可以使用SQL界面调用的一组SQL和过程语句(声明,分配,循环,控制流程 ...

  4. 用Python写了一个postgresql函数,感觉很爽

    用Python写了一个postgresql函数,感觉很爽 CREATE LANGUAGE plpythonu; postgresql函数 CREATE OR REPLACE FUNCTION myfu ...

  5. PostgreSQL函数如何返回数据集 [转]

    PostgreSQL函数如何返回数据集 以下主要介绍PostgreSQL函数/存储过程返回数据集,或者也叫结果集的示例. 背景: PostgreSQL里面没有存储过程,只有函数,其他数据库里的这两个对 ...

  6. postgresql 函数返回结果集(zz)

    pgsql function 系列之一:返回结果集--------------------------------------------------------------------------- ...

  7. postgresql 函数demo

    create or replace function refresh_product_usage() returns void as $$ declare rec record; sub_rec re ...

  8. Oracle 与 PostgreSQL 函数行为的差异引发性能差异

    对于Oracle,对于数据修改的操作通过存储过程处理,而对于函数一般不进行数据修改操作.同时,函数可以通过 Select 进行调用,而存储过程则不行. 一.对于volatile 函数的行为 1.Ora ...

  9. postgresql 函数&存储过程 ; 递归查询

    函数:http://my.oschina.net/Kenyon/blog/108303 紧接上述,补充一下: 输入/输出参数的函数demo(输入作为变量影响sql结果,输出作为结果返回) create ...

  10. 编写postgresql函数执行循环copy命令导入大数据

    CREATE OR REPLACE FUNCTION copyData() RETURNS boolean AS $BODY$ DECLARE i int; begin i :=1; FOR i IN ...

随机推荐

  1. CTreeCtrl获得鼠标点击时的节点

    原文链接: http://blog.csdn.net/lcalqf/article/details/21321923 1.添加图标 HICON icon[10]; icon[0]=AfxGetApp( ...

  2. 转: nginx使用image_filter生成缩略图 -- fasdfs海量图片缩略图整合

      转: nginx使用image_filter生成缩略图 -- fasdfs海量图片缩略图整合 http://blog.csdn.net/CleverCode/article/details/522 ...

  3. mysql查询今天、昨天、本周、本月、上一月 、今年数据

    mysql数据库中的关于查询日期的一些操作如下: --今天 select * from 表名 where to_days(时间字段名) = to_days(now()); --昨天 --本周 SELE ...

  4. python 动态属性

    先来看一下一个常见的Python类的定义: class Person(object): name = None age = None def __init__(self,name,age): self ...

  5. Linq to sql 消除列重复 去重复

    按user分组,取每组的第一个: var o = from r in xe.Descendants("customer")                    group r b ...

  6. 在 Visual Studio 2017 中找回消失的“在浏览器中查看”命令

    不知为何,在新安装 Visual Studio 2017 后,发现所有 Web 项目上右键菜单的"在浏览器中查看"命令消失了,只能以调试模式启动网站,非常别扭. 最后在 Stack ...

  7. iOS 再谈 代理传值,block反向传值

    本贴的例子是:有A和B两个界面,要实现的效果就是先让A跳转到B,然后B中有个颜色的参数,当B跳转到A时,把这个颜色的参数传递给A,在A中利用这个颜色改变自己界面的颜色. 第1步:在发送者(界面B)中, ...

  8. octave画心形曲线

    octave是gnu出品和matlab兼容的科学计算软件,具有体积小,兼容性好,免费的优点. 心形曲线是根据函数:( x2 + y2 -1 )3 - x2y3=0 改编而成. clear all; c ...

  9. 分布式系统的那些事儿(四) - MQ时代的通信

    之前在讲RPC通信的各种好处,特别好用,但是RPC并不是万能的,也并不是适用于各种场景的,因为他是同步的:现如今很多场景下的调用都是异步的,系统A调用B后,并不需要知道B的结果,而且对B的结果无所谓, ...

  10. Nginx做转发

    二台服务器,服务器A做域名转外,所有外网的域名都到这台服务器A的80端口上,服务器B内网地址192.168.1.227, 上面IIS搭建了N多网站,以端口来区分,用以前的方式 配置转发 结果发现首页能 ...