仅当 table 存在时才删除名称为 <table_name>_(sysdate-1) 的 table

Drop table having name: <table_name>_(sysdate-1) only if the table exist

只有 table 存在时我才需要删除 table,可以使用 plsql 块

BEGIN
     EXECUTE IMMEDIATE 'DROP TABLE <table_name>;
EXCEPTION
     WHEN OTHERS THEN
            IF SQLCODE != -942 THEN
                 RAISE;
            END IF;
END

但在我的例子中,table 名称有 sysdate (02062017),例如 table001_02072017,我需要删除所有带有 sysdate-1 的 table。 我该怎么做?

您可以从 user_tables 字典 table 中找到具有给定模式的 table 并在结果上循环以逐一删除。

begin
  for t in (select table_name from user_tables
            where table_name like '%\_'||to_char(sysdate-1,'mmddyyyy') escape '\') 
  loop
    execute immediate 'drop table ' || t.table_name;
  end loop;
exception
  /* Handle your exceptions here. */
end;
/

不鼓励在异常处理中使用 WHEN OTHERS。您应该明确处理错误。

动态 sql 会在这里帮助你,只需使用

execute immediate 'drop table ' || table_name;

在您的程序中