Files
src-1.2/game/server/database/packages/purge_methods.plsql
T
2014-01-17 07:03:16 -07:00

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;
/