-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPRC_CLEAN_EMPTY_PARPITIONS.sql
More file actions
46 lines (44 loc) · 2.32 KB
/
PRC_CLEAN_EMPTY_PARPITIONS.sql
File metadata and controls
46 lines (44 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
CREATE OR REPLACE PROCEDURE PRC_CLEAN_EMPTY_PARPITIONS(p_owner in varchar2) AS
BEGIN
DECLARE
CURSOR listCommands IS
--Query para localizar todas partições vazias
SELECT QRY.SQLCOMMAND,
QRY.TABLE_OWNER,
QRY.TABLE_NAME,
QRY.PARTITION_NAME,
QRY.ROWS_EXIST
FROM (WITH t AS (SELECT table_owner,
table_name,
partition_name,
TO_NUMBER(EXTRACTVALUE(XMLTYPE(DBMS_XMLGEN.getxml('SELECT COUNT(*) AS rows_exist FROM ' ||
DBMS_ASSERT.enquote_name(str => table_owner) || '.' ||
DBMS_ASSERT.enquote_name(str => table_name) ||
' PARTITION (' ||
DBMS_ASSERT.enquote_name(str => partition_name) ||
') WHERE ROWNUM <= 1')),
'/ROWSET/ROW/ROWS_EXIST')) AS rows_exist
FROM all_tab_partitions
WHERE table_owner = p_owner
ORDER BY table_owner,
table_name,
partition_position)
SELECT 'ALTER TABLE ' ||
DBMS_ASSERT.enquote_name(str => table_owner) || '.' ||
DBMS_ASSERT.enquote_name(str => table_name) ||
' DROP PARTITION ' ||
DBMS_ASSERT.enquote_name(str => partition_name) AS SQLCOMMAND,
t.*
FROM t
WHERE rows_exist = 0) QRY;
BEGIN
FOR reg IN listCommands LOOP
EXECUTE IMMEDIATE reg.SQLCOMMAND;
--Log
dbms_output.put_line(reg.SQLCOMMAND);
dbms_output.put_line('Partition delete executed for PARTITION:' ||
reg.PARTITION_NAME || ', from TABLE: ' ||
reg.TABLE_OWNER || '.' || reg.TABLE_NAME);
End Loop;
END;
END;