PostgreSql 函數


  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";

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM