FLEX#64726 Archiveren status historie sensoren
svn path=/Database/trunk/; revision=50818
This commit is contained in:
139
INS/INS_PAC.SRC
139
INS/INS_PAC.SRC
@@ -12,6 +12,7 @@ CREATE OR REPLACE PACKAGE ins AS
|
||||
FUNCTION nextcyclusdate (p_insdeel IN NUMBER, p_srtcontrole IN NUMBER, p_scenario IN NUMBER, p_steps IN NUMBER DEFAULT 0) RETURN DATE;
|
||||
FUNCTION nextcyclusdatesteps (p_insdeel IN NUMBER, p_srtcontrole IN NUMBER, p_steps IN NUMBER DEFAULT 1) RETURN NUMBER;
|
||||
PROCEDURE setinspectstatus (pdlsrtcontrkey IN NUMBER, pstatus IN NUMBER, puserkey IN NUMBER);
|
||||
PROCEDURE ins_daily(today IN DATE DEFAULT SYSDATE);
|
||||
END ins;
|
||||
/
|
||||
|
||||
@@ -348,6 +349,144 @@ CREATE OR REPLACE PACKAGE BODY ins AS
|
||||
END IF;
|
||||
END;
|
||||
|
||||
PROCEDURE ins_daily(today IN DATE DEFAULT SYSDATE)
|
||||
AS
|
||||
CURSOR c_days(eerste_dag IN DATE, laatste_dag IN DATE)
|
||||
IS
|
||||
SELECT DISTINCT TRUNC(h.ins_deel_statedate) uitvoer_dag
|
||||
FROM ins_deel_state_history h
|
||||
, ins_deel d
|
||||
, ins_srtdeel s
|
||||
WHERE h.ins_deel_key = d.ins_deel_key
|
||||
AND d.ins_srtdeel_key = s.ins_srtdeel_key
|
||||
AND BITAND(s.ins_srtdeel_sensortype, 1) = 1
|
||||
AND h.ins_deel_statedate BETWEEN eerste_dag AND (laatste_dag + 1)
|
||||
ORDER BY 1;
|
||||
|
||||
CURSOR c_sensors(dag IN DATE)
|
||||
IS
|
||||
SELECT DISTINCT h.ins_deel_key
|
||||
FROM ins_deel_state_history h
|
||||
, ins_deel d
|
||||
, ins_srtdeel s
|
||||
WHERE h.ins_deel_key = d.ins_deel_key
|
||||
AND d.ins_srtdeel_key = s.ins_srtdeel_key
|
||||
AND BITAND(s.ins_srtdeel_sensortype, 1) = 1
|
||||
AND h.ins_deel_statedate BETWEEN (dag) AND (dag + 1);
|
||||
|
||||
-- Haal de statuswijzigingen van een dag op.
|
||||
-- De laatste status loopt tot middernacht.
|
||||
-- Ook de status van middernacht tot de eerste statuswijziging deze dag moet worden opgehaald.
|
||||
-- Deze kan meerdere dagen voor deze dag voor het laatst gezet zijn!
|
||||
CURSOR c_states ( deel_key IN NUMBER
|
||||
, dag IN DATE)
|
||||
IS
|
||||
SELECT x.status
|
||||
, SUM(x.eindtijd - x.starttijd) totaaltijd
|
||||
FROM (
|
||||
( SELECT a.ins_deel_state status
|
||||
, dag starttijd
|
||||
, min(c.ins_deel_statedate) eindtijd
|
||||
, a.ins_deel_key
|
||||
FROM ins_deel_state_history a
|
||||
, ins_deel_state_history c
|
||||
WHERE a.ins_deel_key = c.ins_deel_key
|
||||
AND c.ins_deel_statedate BETWEEN dag AND dag+1
|
||||
AND a.ins_deel_statedate = (SELECT MAX(b.ins_deel_statedate)
|
||||
FROM ins_deel_state_history b
|
||||
WHERE b.ins_deel_key = a.ins_deel_key
|
||||
AND b.ins_deel_statedate < dag
|
||||
)
|
||||
GROUP BY a.ins_deel_key
|
||||
, a.ins_deel_state
|
||||
)
|
||||
UNION
|
||||
( SELECT a.ins_deel_state status
|
||||
, a.ins_deel_statedate starttijd
|
||||
, least(MIN(b.ins_deel_statedate), dag+1) eindtijd
|
||||
, a.ins_deel_key
|
||||
FROM ins_deel_state_history a
|
||||
, ins_deel_state_history b
|
||||
WHERE a.ins_deel_key = deel_key
|
||||
AND a.ins_deel_statedate BETWEEN dag AND dag+1
|
||||
AND a.ins_deel_key = b.ins_deel_key
|
||||
AND a.ins_deel_state <> b.ins_deel_state
|
||||
AND a.ins_deel_statedate < b.ins_deel_statedate
|
||||
GROUP BY a.ins_deel_statedate
|
||||
, a.ins_deel_state
|
||||
, a.ins_deel_key
|
||||
)
|
||||
) x
|
||||
WHERE x.ins_deel_key = deel_key
|
||||
GROUP BY x.status;
|
||||
|
||||
keep_days NUMBER(3);
|
||||
first_day_available DATE;
|
||||
last_day_compressed DATE;
|
||||
start_day_compress DATE;
|
||||
end_day_compress DATE;
|
||||
BEGIN
|
||||
-- Setting aantal dagen history ophalen.
|
||||
SELECT COALESCE(fac_setting_default, fac_setting_pvalue)
|
||||
INTO keep_days
|
||||
FROM fac_setting
|
||||
WHERE fac_setting_name = 'ins_state_history';
|
||||
|
||||
-- dbms_output.put_line('today: '||to_char(today,'dd-mm-yyyy'));
|
||||
-- Vandaag comprimeren mag niet want je weet niet of je alle meetwaarden al hebt.
|
||||
end_day_compress := TRUNC(today);
|
||||
IF (end_day_compress = TRUNC(sysdate))
|
||||
THEN
|
||||
end_day_compress := end_day_compress -1;
|
||||
END IF;
|
||||
|
||||
-- Voor welke dagen moet ins_deel_state_history gecomprimeerd worden?
|
||||
-- (voor het geval ins_daily een aantal dagen niet heeft gewerkt.)
|
||||
SELECT TRUNC(COALESCE(MIN(ins_deel_statedate), end_day_compress))
|
||||
INTO first_day_available
|
||||
FROM ins_deel_state_history;
|
||||
-- dbms_output.put_line('first_day_available: ' ||to_char(first_day_available,'dd-mm-yyyy'));
|
||||
|
||||
SELECT COALESCE(TRUNC(MAX(ins_deel_statedate)), first_day_available)
|
||||
INTO last_day_compressed
|
||||
FROM ins_deel_state_history_all;
|
||||
-- dbms_output.put_line('last_day_compressed: ' ||to_char(last_day_compressed,'dd-mm-yyyy'));
|
||||
|
||||
SELECT GREATEST(first_day_available, (last_day_compressed + 1))
|
||||
INTO start_day_compress
|
||||
FROM DUAL;
|
||||
-- dbms_output.put_line('Compress from '||to_char(start_day_compress,'dd-mm-yyyy')||' to '||to_char(end_day_compress,'dd-mm-yyyy'));
|
||||
|
||||
FOR r_day IN c_days(start_day_compress, end_day_compress)
|
||||
LOOP
|
||||
-- dbms_output.put_line('Compress '||to_char(r_day.uitvoer_dag,'dd-mm-yyyy'));
|
||||
FOR r_sensor IN c_sensors(r_day.uitvoer_dag)
|
||||
LOOP
|
||||
-- dbms_output.put_line('sensor: '||r_sensor.ins_deel_key);
|
||||
FOR r_state IN c_states(r_sensor.ins_deel_key, r_day.uitvoer_dag)
|
||||
LOOP
|
||||
-- dbms_output.put_line('- '||to_char(r_sensor.ins_deel_key)||' '||r_state.status||' '||to_char(r_state.totaaltijd));
|
||||
INSERT INTO ins_deel_state_history_all
|
||||
( ins_deel_key
|
||||
, ins_deel_statedate
|
||||
, ins_deel_state
|
||||
, ins_deel_statetime
|
||||
) VALUES
|
||||
( r_sensor.ins_deel_key
|
||||
, r_day.uitvoer_dag
|
||||
, r_state.status
|
||||
, r_state.totaaltijd
|
||||
);
|
||||
END LOOP;
|
||||
END LOOP;
|
||||
COMMIT;
|
||||
END LOOP;
|
||||
--
|
||||
-- Verwijder alle records uit ins_deel_state_history ouder dan x dagen.
|
||||
DELETE FROM ins_deel_state_history
|
||||
WHERE TRUNC(ins_deel_statedate) <= TRUNC(SYSDATE - keep_days);
|
||||
END;
|
||||
|
||||
END ins;
|
||||
/
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ CREATE SEQUENCE ins_s_ins_deelkoppeling_key MINVALUE 1;
|
||||
CREATE SEQUENCE ins_s_ins_compositie_key MINVALUE 1;
|
||||
CREATE SEQUENCE ins_s_ins_srtdeel_comp_key MINVALUE 1;
|
||||
CREATE SEQUENCE ins_s_ins_deel_state_hist_key MINVALUE 1;
|
||||
CREATE SEQUENCE ins_s_ins_deel_state_histall_key MINVALUE 1;
|
||||
|
||||
CREATE SEQUENCE ins_s_ins_scenario_key MINVALUE 10;
|
||||
CREATE SEQUENCE ins_s_ins_srtcontrole_key MINVALUE 10;
|
||||
|
||||
@@ -447,6 +447,22 @@ CREATE_TABLE(ins_deel_state_history, 0)
|
||||
VARCHAR2(320)
|
||||
);
|
||||
|
||||
CREATE_TABLE(ins_deel_state_history_all, 0)
|
||||
(
|
||||
ins_deel_state_history_all_key
|
||||
NUMBER(10)
|
||||
CONSTRAINT ins_k_deel_state_histall_key PRIMARY KEY,
|
||||
ins_deel_key
|
||||
NUMBER(10)
|
||||
CONSTRAINT ins_r_ins_deel_key3 REFERENCES ins_deel(ins_deel_key),
|
||||
ins_deel_statedate
|
||||
DATE,
|
||||
ins_deel_state
|
||||
VARCHAR2(128),
|
||||
ins_deel_statetime
|
||||
NUMBER
|
||||
);
|
||||
|
||||
CREATE_TABLE(ins_scenario, 0)
|
||||
(
|
||||
ins_scenario_key
|
||||
|
||||
@@ -556,6 +556,14 @@ BEGIN
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE_TRIGGER(ins_t_ins_deel_state_histall_B_I)
|
||||
BEFORE INSERT ON ins_deel_state_history_all
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE_PRIMARY_KEY(ins_deel_state_history_all_key,ins_s_ins_deel_state_histall_key);
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
CREATE_TRIGGER(ins_t_ins_import_B_IU)
|
||||
BEFORE INSERT OR UPDATE ON ins_import
|
||||
|
||||
@@ -444,6 +444,27 @@ ALTER TABLE ins_srtdeel ADD ins_srtdeel_acadsymbol_dwgy NUMBER(16,3);
|
||||
/////////////////////////////////////////////////////////////////////////////////////////// FCLT#65949
|
||||
ALTER TABLE bes_srtdeel MODIFY bes_srtdeel_veelvoud NUMBER(9,3);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////// FLEX#64726
|
||||
CREATE_TABLE(ins_deel_state_history_all, 0)
|
||||
(
|
||||
ins_deel_state_history_all_key
|
||||
NUMBER(10)
|
||||
CONSTRAINT ins_k_deel_state_histall_key PRIMARY KEY,
|
||||
ins_deel_key
|
||||
NUMBER(10)
|
||||
CONSTRAINT ins_r_ins_deel_key3 REFERENCES ins_deel(ins_deel_key),
|
||||
ins_deel_statedate
|
||||
DATE,
|
||||
ins_deel_state
|
||||
VARCHAR2(128),
|
||||
ins_deel_statetime
|
||||
NUMBER
|
||||
);
|
||||
|
||||
CREATE SEQUENCE ins_s_ins_deel_state_histall_key MINVALUE 1;
|
||||
|
||||
//DEFINE_SETTING('INS', 0001, 'WEB_FACTAB', 'ins_state_history, 'number', '7', 'number of days to keep sensor history')
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////// FCLT#*****
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Reference in New Issue
Block a user