postgreSQL 存储过程
发布时间:2020-12-13 18:19:39 所属栏目:百科 来源:网络整理
导读:CREATE OR REPLACE FUNCTION mt_f_avl_oee_period_e(i_station character varying,i_date character varying,i_start_time character varying,i_end_time character varying) RETURNS integer AS$BODY$DECLARE-- v_start_hour character varying;-- v_end_ho
CREATE OR REPLACE FUNCTION mt_f_avl_oee_period_e(i_station character varying,i_date character varying,i_start_time character varying,i_end_time character varying)
RETURNS integer AS
$BODY$
DECLARE
-- v_start_hour character varying;
-- v_end_hour character varying;
-- v_start_time character varying;
-- v_end_time character varying;
v_start_datetime timestamp;
v_end_datetime timestamp;
v_test9_count int;
v_test9_success int;
v_test30_count int;
v_test30_success int;
v_runningtime double precision;
v_availablerate double precision;
BEGIN
-- hour = even,minute > 30
-- exists
--
-- SELECT EXTRACT(HOUR FROM CURRENT_TIME - interval '2 hours' ) into v_start_hour;
-- SELECT EXTRACT(HOUR FROM CURRENT_TIME ) into v_end_hour;
-- select v_start_hour || ':30' into v_start_time;
-- select v_end_hour || ':30' into v_end_time;
select to_timestamp(i_date|| ' ' || i_start_time,'YYYY-MM-DD HH24:MI') into v_start_datetime;
select to_timestamp(i_date|| ' ' || i_end_time,'YYYY-MM-DD HH24:MI') into v_end_datetime;
---------------------------------
-- 9M
select count(1) into v_test9_count from mt_t_serialno_test_data where testcell = i_station and testtype = '9M'
and createdon >= v_start_datetime
and createdon < v_end_datetime ;
-- 9M success
select count(1)into v_test9_success from mt_t_serialno_test t,mt_t_serialno_test_data d
where d.serialno=t.serialno
and d.testcell = i_station
and t.testtype='9M'
and t.teststatus='P'
and d.createdon >= v_start_datetime
and d.createdon < v_end_datetime ;
-- 30M
select count(1) into v_test30_count from mt_t_serialno_test_data
where testcell = i_station and testtype = '30M'
and createdon >= v_start_datetime
and createdon < v_end_datetime ;
-- 30M success
select count(1)into v_test30_success from mt_t_serialno_test t,mt_t_serialno_test_data d
where d.serialno=t.serialno
and d.testcell = i_station
and t.testtype='30M'
and t.teststatus='P'
and d.createdon >= v_start_datetime
and d.createdon < v_end_datetime ;
-- running time
select coalesce( sum(duration),0) into v_runningtime from engine_test where station = 'GCIC_' || i_station /* and type = 1 */
and state_start >= v_start_datetime
and state_stop < v_end_datetime ;
-- available rate
select v_runningtime/7200 into v_availablerate;
insert into avl_oee_period
(station,start_time,end_time,test9_count,test9_success,test30_count,test30_success,runningtime,availablerate,date_,active,createdon,createdby,rowversionstamp)
values
(i_station,to_char( v_start_datetime,'HH24:MI'),to_char( v_end_datetime,v_test9_count,v_test9_success,v_test30_count,v_test30_success,v_runningtime/60,v_availablerate,now(),1,'mt',1);
---------------------------------
RETURN 1;
EXCEPTION
WHEN others THEN
RAISE;
RETURN 0;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION mt_f_avl_oee_period_e(character varying,character varying,character varying)
OWNER TO postgres;
************************************************************************************************************************************************************ -- Function: mt_f_avl_oee_period_midnight(character varying,character varying)
-- DROP FUNCTION mt_f_avl_oee_period_midnight(character varying,character varying);
CREATE OR REPLACE FUNCTION mt_f_avl_oee_period_midnight(i_station character varying,i_end_time character varying)
RETURNS integer AS
$BODY$
DECLARE
-- v_start_hour character varying;
-- v_end_hour character varying;
-- v_start_time character varying;
-- v_end_time character varying;
v_start_datetime timestamp;
v_end_datetime timestamp;
v_test9_count int;
v_test9_success int;
v_test30_count int;
v_test30_success int;
v_runningtime double precision;
v_runtime double precision;
v_endtime_interval double precision;
v_starttime_interval double precision;
v_availablerate double precision;
BEGIN
-- hour = even,minute > 30
-- exists
--
-- SELECT EXTRACT(HOUR FROM CURRENT_TIME - interval '2 hours' ) into v_start_hour;
-- SELECT EXTRACT(HOUR FROM CURRENT_TIME ) into v_end_hour;
-- select v_start_hour || ':30' into v_start_time;
-- select v_end_hour || ':30' into v_end_time;
-- select to_timestamp((timestamp i_date ),'YYYY-MM-DD HH24:MI') into v_start_datetime;
-- select to_timestamp(to_char((date i_date - interval '1 day' ),'YYYY-MM-DD')|| ' ' || i_start_time,'YYYY-MM-DD HH24:MI') into v_start_datetime;
select to_timestamp(i_date || ' ' || i_end_time,'YYYY-MM-DD HH24:MI') into v_end_datetime;
select v_end_datetime - interval '450 minutes' into v_start_datetime;
---------------------------------
-- 9M
select count(1) into v_test9_count from mt_t_serialno_test_data where testcell = i_station and testtype = '9M'
and createdon >= v_start_datetime
and createdon < v_end_datetime ;
-- 9M success
select count(1)into v_test9_success from mt_t_serialno_test t,mt_t_serialno_test_data d
where d.serialno=t.serialno
and d.testcell = i_station
and t.testtype='9M'
and t.teststatus='P'
and d.createdon >= v_start_datetime
and d.createdon < v_end_datetime ;
-- 30M
select count(1) into v_test30_count from mt_t_serialno_test_data
where testcell = i_station and testtype = '30M'
and createdon >= v_start_datetime
and createdon < v_end_datetime ;
-- 30M success
select count(1)into v_test30_success from mt_t_serialno_test t,mt_t_serialno_test_data d
where d.serialno=t.serialno
and d.testcell = i_station
and t.testtype='30M'
and t.teststatus='P'
and d.createdon >= v_start_datetime
and d.createdon < v_end_datetime ;
-- running time
--select date_part('epoch',timestamp '2013-11-28 11:00'- timestamp '2013-11-28 01:30' );
select coalesce( sum(duration),0) into v_runningtime from engine_test where station = 'GCIC_' || i_station /* and type = 1 */
and state_start >= v_start_datetime
and state_stop < v_end_datetime ;
--select state_start - v_start_datetime into v_fronttime;
--select v_end_datetime - state_stop into v_endtime;
-- v_runtime := v_runningtime + v_fronttime + v_endtime
--starttime_interval
select state_stop - v_start_datetime into v_starttime_interval from engine_test
where state_start <= v_start_datetime and state_stop > v_start_datetime
and station = 'GCIC_' || i_station and type = 1 ;
--endtime_interval
select v_end_datetime - state_start into v_endtime_interval from engine_test
where state_start <= v_end_datetime and state_stop > v_end_datetime
and type = 1 and station = 'GCIC_' || i_station
union
select v_end_datetime - createdon from engine_test
where createdon < v_end_datetime and next_state =1
and id = (select max(id) from engine_test where station = 'GCIC_'|| i_station); /*the last item in engine_test table for the certain station */
v_runtime := v_start_datetime + v_runningtime + v_endtime_interval;
-- available rate
select v_runtime/72 into v_availablerate;
insert into avl_oee_period
(station,1);
---------------------------------
RETURN 1;
EXCEPTION
WHEN others THEN
RAISE;
RETURN 0;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION mt_f_avl_oee_period_midnight(character varying,character varying)
OWNER TO postgres;
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
