PROR#79462 Outlook-koppeling deadlocks
svn path=/Database/branches/DB45/; revision=61821
This commit is contained in:
@@ -644,6 +644,11 @@ AS
|
||||
COMMIT;
|
||||
END import_exchange;
|
||||
|
||||
-- Merk op dat er veel meer dan gewoonlijk COMMIT's tussendoor staan
|
||||
-- Dat is allemaal om zo veel mogelijk deadlocks te voorkomen
|
||||
-- Pas ook op met de volgorde van statements (binnen een transactie)
|
||||
-- Voorkom altijd UPDATE exc_import, dan UPDATE res_rsv_ruimte en dan weer UPDATE exc_import
|
||||
-- De laatste UPDATE exc_import moet voor de UPDATE res_rsv_ruimte
|
||||
PROCEDURE update_exchange (p_import_key IN NUMBER, p_days_from IN NUMBER DEFAULT 0, p_days_to IN NUMBER DEFAULT 90)
|
||||
IS
|
||||
v_aanduiding VARCHAR2 (200);
|
||||
@@ -1015,6 +1020,8 @@ AS
|
||||
FROM res_rsv_ruimte
|
||||
WHERE INSTR(res_rsv_ruimte_externnr, i.appt_id || '|') = 1);
|
||||
|
||||
COMMIT; -- Cleanup
|
||||
|
||||
FOR rec IN c_del
|
||||
LOOP
|
||||
BEGIN
|
||||
@@ -1077,6 +1084,18 @@ AS
|
||||
|
||||
v_errorhint := 'Deelreservering verwijderen';
|
||||
|
||||
-- Succesvol afgerond; zet vlag.
|
||||
-- AKZA#35459: vlag niet zetten voor een single die recurring is geworden;
|
||||
-- die recurrence moeten we straks in de add-cursor nog toevoegen.
|
||||
IF NOT (rec.reden = 'Made recurring')
|
||||
THEN
|
||||
UPDATE exc_import
|
||||
SET gelukt = 1
|
||||
WHERE appt_id || '|' || recur_id =
|
||||
rec.appt_id || '|' || rec.recur_id
|
||||
AND gelukt IS NULL;
|
||||
END IF;
|
||||
|
||||
UPDATE res_rsv_ruimte
|
||||
SET res_status_fo_key = v_status_fo_key,
|
||||
res_rsv_ruimte_verwijder = SYSDATE
|
||||
@@ -1108,18 +1127,6 @@ AS
|
||||
WHERE res_reservering_key =
|
||||
rec.res_reservering_key);
|
||||
|
||||
-- Succesvol afgerond; zet vlag.
|
||||
-- AKZA#35459: vlag niet zetten voor een single die recurring is geworden;
|
||||
-- die recurrence moeten we straks in de add-cursor nog toevoegen.
|
||||
IF NOT (rec.reden = 'Made recurring')
|
||||
THEN
|
||||
UPDATE exc_import
|
||||
SET gelukt = 1
|
||||
WHERE appt_id || '|' || recur_id =
|
||||
rec.appt_id || '|' || rec.recur_id
|
||||
AND gelukt IS NULL;
|
||||
END IF;
|
||||
|
||||
fac.imp_writelog (p_import_key,
|
||||
'I',
|
||||
v_aanduiding,
|
||||
@@ -1143,7 +1150,7 @@ AS
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
COMMIT;
|
||||
COMMIT; -- de DELETE's
|
||||
|
||||
-- Omdat we entries die gefaald zijn 'bewaren', kan het zijn dat we voor <20><>n appointment
|
||||
-- meerdere updates - of zelfs een delete - hebben. Dan zijn we alleen ge<67>nteresseerd in de
|
||||
@@ -1170,6 +1177,8 @@ AS
|
||||
FROM res_rsv_ruimte
|
||||
WHERE res_rsv_ruimte_externnr = i.appt_id || '|' || i.recur_id);
|
||||
|
||||
COMMIT; -- Cleanup
|
||||
|
||||
-- Dan bestaande bijwerken, anders kan het gebeuren dat we op basis van een UPDATE
|
||||
-- eerst een rsv_ruimte aanmaken en 'm daarna meteen proberen bij te werken.
|
||||
-- TODO: is dat nog steeds zo met "gelukt = 1"?
|
||||
@@ -1347,6 +1356,16 @@ AS
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
-- Succesvol afgerond; zet vlag.
|
||||
-- All<6C><6C>n voor nu beschouwde ruimte! (appointments kunnen op meerdere ruimtes zijn)
|
||||
-- TODO: komen we hier ook als er iets mis ging met de bezoekers?
|
||||
UPDATE exc_import
|
||||
SET gelukt = 1
|
||||
WHERE appt_id || '|' || recur_id =
|
||||
rec.appt_id || '|' || rec.recur_id
|
||||
AND room_id = rec.room_id
|
||||
AND gelukt IS NULL;
|
||||
|
||||
-- We hebben niet geskipt, dus willen we deze rsv_ruimte bijwerken
|
||||
-- Basisgegevens reservering gewijzigd?
|
||||
IF ( v_ruimte_extern_id != rec.res_ruimte_extern_id
|
||||
@@ -1457,16 +1476,6 @@ AS
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
-- Succesvol afgerond; zet vlag.
|
||||
-- All<6C><6C>n voor nu beschouwde ruimte! (appointments kunnen op meerdere ruimtes zijn)
|
||||
-- TODO: komen we hier ook als er iets mis ging met de bezoekers?
|
||||
UPDATE exc_import
|
||||
SET gelukt = 1
|
||||
WHERE appt_id || '|' || recur_id =
|
||||
rec.appt_id || '|' || rec.recur_id
|
||||
AND room_id = rec.room_id
|
||||
AND gelukt IS NULL;
|
||||
|
||||
IF (v_debug)
|
||||
THEN
|
||||
fac.imp_writelog (p_import_key,
|
||||
@@ -1493,7 +1502,7 @@ AS
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
COMMIT;
|
||||
COMMIT; -- de UPDATE's
|
||||
|
||||
-- Ten slotte nieuwe reserveringen toevoegen
|
||||
FOR rec IN c_add
|
||||
@@ -1560,6 +1569,14 @@ AS
|
||||
-- AND res_rsv_ruimte_externnr NOT LIKE '%|'||rec.recur_id||'|%'
|
||||
AND res_rsv_ruimte_verwijder IS NULL;
|
||||
|
||||
-- Succesvol afgerond; zet vlag.
|
||||
-- TODO: komen we hier ook als er iets mis ging met de bezoekers?
|
||||
UPDATE exc_import
|
||||
SET gelukt = 1
|
||||
WHERE appt_id || '|' || recur_id =
|
||||
rec.appt_id || '|' || rec.recur_id
|
||||
AND gelukt IS NULL;
|
||||
|
||||
-- Er bestaan al deelreserveringen voor andere occurences van deze recurring appointment
|
||||
-- Deelreservering binnen de bijbehorende res_reservering aanmaken
|
||||
IF (v_count > 0)
|
||||
@@ -1687,14 +1704,6 @@ AS
|
||||
v_errorhint := 'Toevoegen bezoekers';
|
||||
exc.importBezoekers(p_import_key, rec.appt_id, rec.recur_id, v_rsv_ruimte_key, date_interval_start, date_interval_end);
|
||||
|
||||
-- Succesvol afgerond; zet vlag.
|
||||
-- TODO: komen we hier ook als er iets mis ging met de bezoekers?
|
||||
UPDATE exc_import
|
||||
SET gelukt = 1
|
||||
WHERE appt_id || '|' || recur_id =
|
||||
rec.appt_id || '|' || rec.recur_id
|
||||
AND gelukt IS NULL;
|
||||
|
||||
IF (v_debug)
|
||||
THEN
|
||||
fac.imp_writelog (p_import_key,
|
||||
@@ -1768,7 +1777,7 @@ AS
|
||||
v_errorhint := '';
|
||||
exc.set_ruimtes_clean (p_import_key);
|
||||
END IF;
|
||||
COMMIT;
|
||||
COMMIT; -- de INSERT's
|
||||
|
||||
EXCEPTION
|
||||
WHEN OTHERS
|
||||
|
||||
Reference in New Issue
Block a user