我只需要在表存在时删除表,可以使用plsql块
来执行BEGIN
EXECUTE IMMEDIATE 'DROP TABLE <table_name>;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
END
但在我的情况下,表名有sysdate(02062017),例如table001_02072017,我需要用sysdate-1删除所有这些表。 我怎么能这样做?
答案 0 :(得分:1)
您可以在user_tables
字典表中找到具有给定模式的表,并在结果上循环逐一删除。
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
。您应该明确处理错误。
答案 1 :(得分:0)
动态sql将帮助您使用
execute immediate 'drop table ' || table_name;
在您的程序中