我需要删除在2010年1月1日之前创建的所有表。我在stackoverflow中遇到了一些示例,但没有一个符合我的需要。与主键没有冲突,这是一个好点。它必须在pl / sql中,但sql没问题,我可以搞清楚。
答案 0 :(得分:5)
您可以使用DBA_OBJECTS
查找在特定日期之前创建的所有表格,并使用它来创建类似DROP TABLE <TABLE_NAME>
的字符串。然后,您可以使用EXECUTE IMMEDIATE
删除该表。
DECLARE
V_STRING VARCHAR2(200);
BEGIN
FOR I IN (SELECT *
FROM SYS.DBA_OBJECTS T
WHERE T.OBJECT_TYPE = 'TABLE'
AND T.OWNER = 'USERNAME'
AND T.CREATED < date '2010-01-01') LOOP
V_STRING := 'DROP TABLE ' || I.OBJECT_NAME;
EXECUTE IMMEDIATE V_STRING;
END LOOP;
END;
如果您只想为自己的用户删除表,则USER_OBJECTS
仅包含您登录的用户拥有的对象。