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

mlh*_*zan 0 sql oracle plsql

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

Nit*_*ish 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;
Run Code Online (Sandbox Code Playgroud)

如果您只想为自己的用户删除表,USER_OBJECTS则只包含您登录的用户拥有的对象.