如何删除在日期之前创建的用户名下的所有表?

时间:2016-02-22 03:52:09

标签: sql oracle plsql

我需要删除在2010年1月1日之前创建的所有表。我在stackoverflow中遇到了一些示例,但没有一个符合我的需要。与主键没有冲突,这是一个好点。它必须在pl / sql中,但sql没问题,我可以搞清楚。

1 个答案:

答案 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仅包含您登录的用户拥有的对象。