CREATE OR REPLACE PACKAGE CONN_HALTES AS FUNCTION get_halte_key (p_haltecode IN VARCHAR2 ,p_kenmerk_key IN NUMBER ) return NUMBER; FUNCTION verwerk_halte (p_HALTECODE IN VARCHAR2 ,p_HALTENAAM IN VARCHAR2 ,p_PLAATSNAAM IN VARCHAR2 ,p_PLACECODE IN VARCHAR2 ,p_ZONE IN VARCHAR2 ,p_X_COORDINAAT IN VARCHAR2 ,p_Y_COORDINAAT IN VARCHAR2 ,p_LIJNNUMMER IN VARCHAR2 ) return NUMBER; END CONN_HALTES; / CREATE OR REPLACE PACKAGE BODY CONN_HALTES AS FUNCTION get_halte_key (p_haltecode IN VARCHAR2 ,p_kenmerk_key IN NUMBER ) return NUMBER IS v_result NUMBER(10); v_count NUMBER(10); BEGIN -- Init v_result := 0; select count(*) into v_count from ins_deel where ins_deel_verwijder is null and substr(ins_deel_omschrijving,2,8) = p_haltecode; IF (v_count = 1) THEN select ins_deel_key into v_result from ins_deel where ins_deel_verwijder is null and substr(ins_deel_omschrijving,2,8) = p_haltecode; ELSE select count(*) into v_count FROM ins_deel d, ins_kenmerkdeel kd WHERE d.ins_deel_key = kd.ins_deel_key AND kd.ins_kenmerk_key = p_kenmerk_key AND kd.ins_kenmerkdeel_waarde = p_haltecode AND ins_kenmerkdeel_verwijder is null; IF (v_count = 1) THEN select d.ins_deel_key into v_result FROM ins_deel d, ins_kenmerkdeel kd WHERE d.ins_deel_key = kd.ins_deel_key AND kd.ins_kenmerk_key = p_kenmerk_key AND kd.ins_kenmerkdeel_waarde = p_haltecode AND ins_kenmerkdeel_verwijder is null; END IF; END IF; RETURN v_result; EXCEPTION WHEN OTHERS THEN RETURN -1; END get_halte_key; FUNCTION verwerk_halte (p_HALTECODE IN VARCHAR2 ,p_HALTENAAM IN VARCHAR2 ,p_PLAATSNAAM IN VARCHAR2 ,p_PLACECODE IN VARCHAR2 ,p_ZONE IN VARCHAR2 ,p_X_COORDINAAT IN VARCHAR2 ,p_Y_COORDINAAT IN VARCHAR2 ,p_LIJNNUMMER IN VARCHAR2 ) return NUMBER IS v_DEEL_OMSCHRIJVING VARCHAR2(30); v_HALTENAAM VARCHAR2(40); v_HALTECODE VARCHAR2(8); v_PLAATSNAAM VARCHAR2(30); v_PLACECODE VARCHAR2(10); v_ZONE VARCHAR2(10); v_X_COORDINAAT VARCHAR2(10); v_Y_COORDINAAT VARCHAR2(10); v_LIJNNUMMER VARCHAR2(200); ORACLE_err_num NUMBER; ORACLE_err_mes VARCHAR2(100); v_result NUMBER(10); v_errormsg VARCHAR2(1000); v_import_row VARCHAR2(1000); v_count NUMBER(10); v_terreinsector_key NUMBER(10); v_ins_deel_key NUMBER(10); c_error_result NUMBER(10) := -1; -- Constanten: diversen c_srtdeel_key INTEGER := 43401; -- Halte c_srtdeel_module VARCHAR2 (3) := 'INS'; c_locatie_key_onbekend INTEGER := 3123; c_ruimte_type VARCHAR2 (1) := 'T'; c_halte_prefix VARCHAR2 (1) := 'H'; -- Constanten: kenmerken key's c_halte_code INTEGER := 501; c_zone_kenmerk_key INTEGER := 503; c_place_kenmerk_key INTEGER := 541; c_plaatsnaam_kenmerk_key INTEGER := 502; c_haltenaam_kenmerk_key INTEGER := 504; c_xcoordinaat_kenmerk_key INTEGER := 505; c_ycoordinaat_kenmerk_key INTEGER := 506; c_Lijnnummer1_kenmerk_key INTEGER := 601; BEGIN -- INIT v_result := c_error_result; v_errormsg := 'INIT'; v_import_row := p_HALTECODE||'|'||p_HALTENAAM||'|'||p_PLAATSNAAM||'|'||p_PLACECODE||'|'||p_ZONE||'|'||p_X_COORDINAAT||'|'||p_Y_COORDINAAT||'|'||p_LIJNNUMMER; v_HALTENAAM := substr(p_HALTENAAM,1,40); v_HALTECODE := substr(p_HALTECODE,1,8); v_PLAATSNAAM := substr(p_PLAATSNAAM,1,30); v_PLACECODE := substr(p_PLACECODE,1,10); v_ZONE := substr(p_ZONE,1,4); v_X_COORDINAAT := substr(p_X_COORDINAAT,1,6); v_Y_COORDINAAT := substr(p_Y_COORDINAAT,1,6); v_LIJNNUMMER := substr(p_LIJNNUMMER,1,200); v_DEEL_OMSCHRIJVING := substr(c_halte_prefix||v_HALTECODE||' '||v_HALTENAAM,1,30); -- alg_terrein v_errormsg := '-- Terrein zoeken'; select count(*) into v_count from alg_terreinsector where alg_terreinsector_verwijder is null and alg_terreinsector_upper = upper(substr(v_PLAATSNAAM,1,10)) and alg_locatie_key = c_locatie_key_onbekend; IF (v_count = 0) THEN v_errormsg := '-- alg_terrein toevoegen '; INSERT INTO alg_terreinsector (alg_locatie_key ,alg_terreinsector_code ,alg_terreinsector_naam) VALUES (c_locatie_key_onbekend ,SUBSTR(v_PLAATSNAAM,1,10) ,SUBSTR(v_PLAATSNAAM,1,30)); END IF; v_errormsg := '-- Terrein zoeken(2) '; select alg_terreinsector_key into v_terreinsector_key from alg_terreinsector where alg_terreinsector_verwijder is null and alg_terreinsector_upper = upper(substr(v_PLAATSNAAM,1,10)); select get_halte_key(v_HALTECODE,c_halte_code) into v_ins_deel_key from dual; IF (v_ins_deel_key <= 0) THEN SELECT ins_s_ins_inst_keys.NEXTVAL INTO v_ins_deel_key FROM DUAL; v_errormsg := '-- Toevoegen halte '; insert into INS_DEEL (ins_deel_key ,ins_srtdeel_key ,ins_deel_module ,ins_alg_ruimte_key ,ins_alg_ruimte_type ,ins_deel_omschrijving) values (v_ins_deel_key ,c_srtdeel_key ,c_srtdeel_module ,v_terreinsector_key ,c_ruimte_type ,v_DEEL_OMSCHRIJVING); ELSE update ins_deel set ins_deel_omschrijving = v_DEEL_OMSCHRIJVING where ins_deel_key = v_ins_deel_key; END IF; v_result := v_ins_deel_key; v_errormsg := '-- Verwijder eventueel bestaande flexibele kenmerken die relevant zijn voor de koppeling'; DELETE FROM ins_kenmerkdeel WHERE ins_deel_key = v_ins_deel_key AND ins_kenmerk_key in (c_halte_code,c_zone_kenmerk_key,c_place_kenmerk_key,c_plaatsnaam_kenmerk_key,c_haltenaam_kenmerk_key,c_xcoordinaat_kenmerk_key,c_ycoordinaat_kenmerk_key,c_Lijnnummer1_kenmerk_key); -- c_halte_code v_errormsg := '--C-- flexprops Halte code toevoegen'; IF v_HALTECODE IS NOT NULL THEN INSERT INTO ins_kenmerkdeel ( ins_kenmerk_key , ins_deel_Key , ins_kenmerkdeel_waarde) VALUES(c_Halte_code , v_ins_deel_key , substr(v_HALTECODE,1,8)); END IF; -- c_zone_kenmerk_key v_errormsg := '--N-- flexprops Zone toevoegen'; IF v_ZONE IS NOT NULL THEN INSERT INTO ins_kenmerkdeel ( ins_kenmerk_key , ins_deel_Key , ins_kenmerkdeel_waarde) VALUES(c_zone_kenmerk_key , v_ins_deel_key , v_ZONE); END IF; -- c_place_kenmerk_key v_errormsg := '--C-- flexprops Placecode toevoegen'; IF v_PLACECODE IS NOT NULL THEN INSERT INTO ins_kenmerkdeel ( ins_kenmerk_key , ins_deel_Key , ins_kenmerkdeel_waarde) VALUES(c_place_kenmerk_key , v_ins_deel_key , v_PLACECODE); END IF; -- c_plaatsnaam_kenmerk_key v_errormsg := '--C-- flexprops Plaatsnaam toevoegen'; IF v_PLAATSNAAM IS NOT NULL THEN INSERT INTO ins_kenmerkdeel ( ins_kenmerk_key , ins_deel_Key , ins_kenmerkdeel_waarde) VALUES(c_plaatsnaam_kenmerk_key , v_ins_deel_key , v_PLAATSNAAM); END IF; -- c_haltenaam_kenmerk_key v_errormsg := '--N-- flexprops Haltenaam toevoegen'; IF v_HALTENAAM IS NOT NULL THEN INSERT INTO ins_kenmerkdeel ( ins_kenmerk_key , ins_deel_Key , ins_kenmerkdeel_waarde) VALUES(c_haltenaam_kenmerk_key , v_ins_deel_key , v_HALTENAAM); END IF; -- c_xcoordinaat_kenmerk_key v_errormsg := '--N-- flexprops X coördinaten toevoegen'; IF v_X_COORDINAAT IS NOT NULL THEN INSERT INTO ins_kenmerkdeel ( ins_kenmerk_key , ins_deel_Key , ins_kenmerkdeel_waarde) VALUES(c_xcoordinaat_kenmerk_key , v_ins_deel_key , v_X_COORDINAAT); END IF; -- c_ycoordinaat_kenmerk_key v_errormsg := '--N-- flexprops Y coördinaten toevoegen'; IF v_Y_COORDINAAT IS NOT NULL THEN INSERT INTO ins_kenmerkdeel ( ins_kenmerk_key , ins_deel_Key , ins_kenmerkdeel_waarde) VALUES(c_ycoordinaat_kenmerk_key , v_ins_deel_key , v_Y_COORDINAAT); END IF; -- c_Lijnnummer1_kenmerk_key v_errormsg := '--N-- flexprops passerende lijnen toevoegen'; IF v_LIJNNUMMER IS NOT NULL THEN INSERT INTO ins_kenmerkdeel ( ins_kenmerk_key , ins_deel_Key , ins_kenmerkdeel_waarde) VALUES(c_Lijnnummer1_kenmerk_key , v_ins_deel_key , v_LIJNNUMMER); END IF; v_errormsg := 'Verwijderen rapportage meldingen ouder dan 30 dagen'; DELETE FROM imp_log WHERE imp_log_applicatie = 'VERWERK_HALTE' AND imp_log_datum + 30 < SYSDATE; RETURN v_result; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := '(ORACLE error ' || to_char(oracle_err_num) || '/' || oracle_err_mes || ')'; fac.imp_writelog ('VERWERK_HALTE', 'PACKAGE CONN_HALTES', 'E', v_errormsg, v_import_row ); RETURN c_error_result; END verwerk_halte; END CONN_HALTES; / CREATE OR REPLACE TRIGGER conn_t_oac_stg_haltes_B_IU BEFORE INSERT OR UPDATE ON oac_stg_haltes FOR EACH ROW BEGIN IF CONN_HALTES.verwerk_halte(:new.HALTE_CODE,:new.HALTENAAM_KORT,:new.PLACE_CODE,:new.PLAATSNAAM,:new.ZONE_CODE,to_char(:new.LOKATIECODE_X),to_char(:new.LOKATIECODE_Y),:new.PASSERENDE_LIJNEN) > -1 THEN :new.HALTE_CODE := :new.HALTE_CODE; -- dummy ELSE :new.HALTE_CODE := :new.HALTE_CODE; -- dummy END IF; END; / INSERT INTO FAC_USRRAP ( FAC_USRRAP_OMSCHRIJVING, FAC_USRRAP_VIEW_NAME, FAC_USRRAP_IN_HUIDIGE_LOCATIE, FAC_USRRAP_TEMPLATE, FAC_USRRAP_MACRO, FAC_USRRAP_VRAAGBEGINDATUM, FAC_USRRAP_VRAAGEINDDATUM, FAC_USRRAP_FUNCTIE, FAC_USRRAP_INFO, FAC_FUNCTIE_KEY, FAC_USRRAP_AUTOREFRESH ) VALUES ( 'Haltes die niet zijn toegevoegd of gewijzigd', 'conn_v_rap_chalte_import', NULL, NULL, NULL , 0, 0, 0, '', 30, 0); CREATE OR REPLACE VIEW conn_v_rap_chalte_import AS SELECT imp_log_omschrijving melding, TO_CHAR(imp_log_datum,'DD-MM-YYYY') datum_import, imp_log_hint importregel FROM imp_log ORDER BY imp_log_datum DESC; commit;