我想刪除在已共同的名字添加到每個表的末尾一個例子的表空間某些表: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