我想删除在已共同的名字添加到每个表的末尾一个例子的表空间某些表:Oracle |删除表
TABLE1_NAME1_COMMON
TABLE2_NAME2_COMMON
TABLE3_NAME3_COMMON
我听说了甲骨文的功能,但我不熟悉多与那些让我我期待着一些帮助。
谢谢。
我想删除在已共同的名字添加到每个表的末尾一个例子的表空间某些表:Oracle |删除表
TABLE1_NAME1_COMMON
TABLE2_NAME2_COMMON
TABLE3_NAME3_COMMON
我听说了甲骨文的功能,但我不熟悉多与那些让我我期待着一些帮助。
谢谢。
如果你完全确信你在做什么,也就是说,如果你确定,你不小心掉落,你不想删除表,你可以做:
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;
/
编辑:
user_tables
而不是dba_tables
选择,因为它似乎更安全的做法。set serveroutput on
为dbms_output.put_line
,以便被打印begin .. exception .. end
为要显示的错误。你可以做,在一个过程,但它可能是最好只选择那些DROP
-statements,审查这些和手动执行它们:
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;
以确定他们可以使用:
SELECT * FROM user_tables WHERE tablespace_name='MySpace' AND table_name like '%COMMON';
然后,您可以使用SELECT来派生您的DROP语句。或者你可以编写一个PL/SQL函数来遍历“公共表”,并使用EXECUTE IMMEDIATE删除它们。
但我会确保你在选择中首先100%确定。
这给了我一个错误 – Switch 2011-03-16 12:33:56
非常感谢,它的工作就像一个魅力:) :) – Switch 2011-03-16 13:03:51
我可以问这是PL/SQL的东西吗?或功能? – Ascendant 2013-07-24 01:27:46