Oracle通过PLSQL+游标删除大量创建的对象 |
发表者:admin分类:数据库2022-08-06 14:31:05 阅读[473] |
Oracle通过PLSQL+游标删除大量创建的对象
1,由于执行大量SQL脚本时,非发现通过SYSTEM账号执行的,所以创建了很多对像objects,本应是创建在其它账号模式下的,所以需要删除。但是创建的资源比较多,靠手动清理,会有遗留。
2,这里就想到先查出时间点内创建的对象,再通过PLSQL来删除掉。
3,查看今天创建的对象,确认都是需要删除的,使用以下命令:
SELECT o.OBJECT_NAME, o.OBJECT_TYPE
FROM all_objects o
WHERE o.CREATED > TO_DATE ('2022-08-06', 'yyyy-mm-dd')
AND o.OWNER = 'SYSTEM' ;
4,发现在TABLE,INDEX, SEQUENCE三种类型,由于INDEX索引只是依附表的,所以只需要删除TABLE与SEQUENC,就可以了。
具体PLSQL内容如下:
DECLARE
CURSOR cur_d_oj IS
SELECT o.OBJECT_NAME, o.OBJECT_TYPE
FROM all_objects o
WHERE o.CREATED > TO_DATE ('2022-08-06', 'yyyy-mm-dd')
AND o.OWNER = 'SYSTEM'
ORDER BY 2;
c_d cur_d_oj%ROWTYPE;
BEGIN
OPEN cur_d_oj;
LOOP
FETCH cur_d_oj INTO c_d;
EXIT WHEN cur_d_oj%NOTFOUND;
CASE
WHEN c_d.object_type = 'TABLE'
THEN
EXECUTE IMMEDIATE 'DROP '
|| c_d.object_type
|| ' '
|| c_d.object_name
|| ' cascade constraints';
DBMS_OUTPUT.put_line (
c_d.object_name
|| ' 的类型是: '
|| c_d.object_type
|| ', 删除成功');
WHEN c_d.object_type = 'SEQUENCE'
THEN
EXECUTE IMMEDIATE 'DROP '
|| c_d.object_type
|| ' '
|| c_d.object_name;
DBMS_OUTPUT.put_line (
c_d.object_name
|| ' 的类型是: '
|| c_d.object_type
|| ', 删除成功');
ELSE
DBMS_OUTPUT.put_line (
c_d.object_name
|| ' 的类型是: '
|| c_d.object_type
|| ', 不需要删除');
END CASE;
END LOOP;
CLOSE cur_d_oj;
COMMIT;
END;
/
转载请标明出处【Oracle通过PLSQL+游标删除大量创建的对象】。
《www.micoder.cc》
虚拟化云计算,系统运维,安全技术服务.
Tags: | [阅读全文...] |
最新评论