mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-07-14 00:01:30 -04:00
115 lines
4.5 KiB
Plaintext
115 lines
4.5 KiB
Plaintext
CREATE OR REPLACE PACKAGE BODY purge_methods IS
|
|
|
|
FUNCTION Purge_objects
|
|
(date_in in objects.deleted_date%type)
|
|
RETURN NUMBER IS
|
|
v_count NUMBER := 0;
|
|
BEGIN
|
|
--open the cursor for the object ids we want to purge.
|
|
--we will use these ids to delete child records from other tables
|
|
FOR x IN (SELECT /*+ INDEX (OBJECTS DELETED_OBJECT_IDX) */ object_id
|
|
FROM objects
|
|
WHERE deleted_date < date_in) LOOP
|
|
|
|
IF v_count = 0 THEN
|
|
dbms_output.put_line ('Starting to delete....');
|
|
END IF;
|
|
|
|
--delete all children
|
|
DELETE FROM armor nologging WHERE object_id = x.object_id;
|
|
|
|
DELETE FROM battlefield_marker_objects nologging WHERE object_id = x.object_id;
|
|
DELETE FROM battlefield_participants nologging WHERE region_object_id = x.object_id;
|
|
DELETE FROM battlefield_participants nologging WHERE character_object_id = x.object_id ;
|
|
DELETE FROM biographies nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM building_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM cell_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM creature_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM experience_points nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM factory_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM guild_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM harvester_installation_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM installation_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM intangible_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM location_lists nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM manf_schematic_attributes nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM manf_schematic_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM manufacture_inst_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM mission_objects nologging WHERE object_id = x.object_id ;
|
|
|
|
DELETE FROM object_variables nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM planet_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM player_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM property_lists nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM resource_container_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM scripts nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM static_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM tangible_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM token_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM universe_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM vehicle_objects nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM waypoints nologging WHERE object_id = x.object_id ;
|
|
DELETE FROM weapon_objects nologging WHERE object_id = x.object_id ;
|
|
--delete messages target(object_id)
|
|
DELETE FROM messages nologging WHERE target = x.object_id ;
|
|
|
|
v_count := v_count + 1;
|
|
|
|
COMMIT;
|
|
|
|
END LOOP;
|
|
|
|
--delete parent
|
|
DELETE /*+ INDEX (OBJECTS DELETED_OBJECT_IDX) */ FROM objects
|
|
nologging WHERE deleted_date < date_in;
|
|
|
|
dbms_output.put_line (v_count||': iterations');
|
|
|
|
COMMIT;
|
|
RETURN 0;
|
|
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
ROLLBACK;
|
|
IF v_count = 0 THEN
|
|
dbms_output.put_line ('never deleted');
|
|
END IF;
|
|
dbms_output.put_line (v_count||': iterations');
|
|
RETURN SQLCODE;
|
|
END Purge_objects;
|
|
--
|
|
--
|
|
--
|
|
FUNCTION time_purge
|
|
(date_in IN VARCHAR2)
|
|
RETURN INTEGER IS
|
|
v_retval NUMBER := 0;
|
|
v_date VARCHAR2(20) := date_in;
|
|
v_time NUMBER := 1;
|
|
BEGIN
|
|
|
|
FOR i IN 1..24 LOOP
|
|
dbms_output.put_line(to_char(to_date(v_date, 'dd-mon-yy hh24:mi:ss') + v_time/24, 'DD-MON-YY hh24:mi:ss'));
|
|
v_retval := purge_objects(to_date(v_date, 'dd-mon-yy hh24:mi:ss') + v_time/24);
|
|
EXIT WHEN v_retval <> 0;
|
|
|
|
IF v_time = 23 THEN
|
|
v_time := v_time + (59/60);
|
|
ELSE
|
|
v_time := v_time + 1;
|
|
END IF;
|
|
END LOOP;
|
|
|
|
RETURN 0;
|
|
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
ROLLBACK;
|
|
dbms_output.put_line('Purge return values: '||v_retval);
|
|
dbms_output.put_line('Time it failed at: '||v_time);
|
|
RETURN SQLCODE;
|
|
END time_purge;
|
|
|
|
end purge_methods;
|
|
/
|