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. Java String首字母大写

    一種寫法參考 public String upperFirstChar(String input) { if (input == null || "".equals(input)) ...

  2. lnmp 一键安装

    系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian/Deepin Server/Aliyun/Amazon/Mint Linux发行版 需要5GB以上硬盘剩 ...

  3. 如何安全的下载Devcon.exe文件

    devcon.exe是windows设备管理器的命令行版本,可以让你在cmd中修改设备,但是微软没有提供单独的下载,只能下载一个2G多的wdk包(windows drive kits)才行.私下使用别 ...

  4. 关于android fragment 某些使用记录

    1.首先是当android2.3.3之前还是用着android-support-v4.jar来加载Fragment时. a.在xml布局应该如何定义呢? 答案:用FrameLayout标签来定义(在a ...

  5. webBrowser获取cookie

    private void BtnOpenUrl_Click(object sender, EventArgs e) { if (txtUrl.Text != "") { Myweb ...

  6. webpack配置实践

    首先我们的需求: 打包调试 提取公共代码 压缩 热替换 1.打包调试 第一步,我们在目标文件夹下安装webpack(假设已有package.json)npm i webpack@ -gcnpm i w ...

  7. zabbix 对网卡的流量的监控

    新建Template:Network incoming or outcoming on eth1 新建items:Network incoming on eth1 特别注意:储存值:差量(每秒速率)- ...

  8. step-by-step-creating-a-sql-server-2012-alwayson-availability-group/

    https://blogs.technet.microsoft.com/canitpro/2013/08/19/step-by-step-creating-a-sql-server-2012-alwa ...

  9. (原创)发布一个c++11开发的轻量级的并行Task库TaskCpp

    TaskCpp简介 TaskCpp是c++11开发的一个跨平台的并行task库,它的设计思路来源于微软的并行计算库ppl和intel的并行计算库tbb,关于ppl和tbb我在前面有介绍.既然已经有了这 ...

  10. Shell(6): 多线程操作及线程数

    任务需要:当我需要对一个文件夹中的文件,分别压缩的时候: 原始的代码: #!/usr/bin/shell function getdir(){ for element in `ls $1` do #e ...