Oracle |放表

时间:2011-03-16 11:24:56

标签: sql database oracle plsql

我想删除一个表空间中的某些表,这些表的公共名称附加到每个表的末尾,例如:

TABLE1_NAME1_COMMON
TABLE2_NAME2_COMMON
TABLE3_NAME3_COMMON

我听说过Oracle功能,但我对这些功能并不熟悉,所以我期待得到一些帮助。

感谢。

3 个答案:

答案 0 :(得分:9)

如果你完全确定自己在做什么,也就是说,如果你确定不小心放下一张你不想放弃的桌子,你可以这样做:

set serveroutput on size 1000000

begin
for r in (

  select table_name 
    from user_tables 
   where table_name like '%\_COMMON' escape '\')

loop

  execute immediate 'drop table ' || r.table_name;

end loop;
exception when others then
   dbms_output.put_line(sqlerrm);
end;
/

修改

  1. 立即更改从user_tables而不是dba_tables进行选择,因为它似乎更安全。
  2. 添加set serveroutput on以便打印dbms_output.put_line
  3. 添加begin .. exception .. end以便显示错误。

答案 1 :(得分:3)

您可以在一个程序中执行此操作,但最好只选择那些DROP - 语句,查看并手动执行它们:

SELECT 'DROP TABLE ' || table_name || ';'
FROM user_tables
WHERE table_name LIKE '%\_COMMON' ESCAPE '\';

将返回

DROP TABLE TABLE1_NAME1_COMMON;
DROP TABLE TABLE2_NAME2_COMMON;
DROP TABLE TABLE3_NAME3_COMMON;

答案 2 :(得分:0)

识别它们你可以使用:

SELECT * FROM user_tables WHERE tablespace_name='MySpace' AND table_name like '%COMMON';

然后,您可以使用SELECT派生DROP语句。或者你可以编写一个PL / SQL函数来遍历“公共表”并使用EXECUTE IMMEDIATE对它们进行DROP。

我会确保你首先在选择中100%确定。