Oracle |дроп стол - PullRequest
       1

Oracle |дроп стол

3 голосов
/ 16 марта 2011

Я хочу отбросить определенные таблицы в табличное пространство, к которому в конце каждой таблицы добавлено общее имя, например:

TABLE1_NAME1_COMMON
TABLE2_NAME2_COMMON
TABLE3_NAME3_COMMON

Я слышал о функциях Oracle, но я не очень хорошо знаком с ними.Я жду руку помощи.

Спасибо.

Ответы [ 3 ]

9 голосов
/ 16 марта 2011

Если вы полностью уверены в том, что делаете, то есть, если вы уверены, что случайно не уронили стол, который не хотите отбрасывать, вы можете выполнить:

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 для отображения ошибок.
3 голосов
/ 16 марта 2011

Вы можете сделать это в процедуре, но, возможно, лучше просто выбрать эти 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;
0 голосов
/ 16 марта 2011

для их идентификации вы можете использовать:

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

Затем вы можете либо получить свои операторы DROP, используя SELECT.Или вы можете написать функцию PL / SQL для циклического прохождения «Общих таблиц» и удалить их, используя EXECUTE IMMEDIATE.

Однако я бы сначала убедился, что вы на 100% уверены в выборе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...