powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / дропнуть много таблиц
11 сообщений из 11, страница 1 из 1
дропнуть много таблиц
    #32168788
zue
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озадачили сторонние разработчики (которых надо вешать за левую ногу!). У них создается куча лишних таблиц, которые предполагается, что сам пользователь будет время от времени удалять. Не хочу давать своим юзерам такие привилегии, а самому чистить схемы по одной таблице лень. Отсюда вопрос: можно ли дропнуть таблицы списком, т.е. передать в команду drop table имя таблицы как параметр? Пробовал со всякими кавычками и скобками, но увы...
...
Рейтинг: 0 / 0
дропнуть много таблиц
    #32168795
Elsid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использовать DBMS_SQL.
...
Рейтинг: 0 / 0
дропнуть много таблиц
    #32168807
zue
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой пакет укажите хотя-бы, плз! Чтобы можно было доку поднимать
...
Рейтинг: 0 / 0
дропнуть много таблиц
    #32168852
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А есть какой-либо признак, который отличает подобные таблицы от других?
...
Рейтинг: 0 / 0
дропнуть много таблиц
    #32168860
zue
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, они начинаются с INZ. Маску построить можно. Вопрос, на что ее наложить.
...
Рейтинг: 0 / 0
дропнуть много таблиц
    #32168872
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ха, напиши тогда скрипт:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
spool drop_tables.sql
select 
  'drop table '||table_name||';'
 from
  dba_tables
 where
  table_name like 'INZ%';
spool off;



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  'drop table '||table_name||';'
 from
  dba_tables
 where
  table_name like '%TABLE%';
SQL>    2      3      4      5      6   
'DROPTABLE'||TABLE_NAME||';'
 ------------------------------------------
 
drop table TABLE_PRIVILEGE_MAP;
drop table AQ$_QUEUE_TABLES;
drop table AQ$_QUEUE_TABLE_AFFINITIES;
drop table PLAN_TABLE;


Настройки всякие, что-бы лишнее убрать - сам напишешь
...
Рейтинг: 0 / 0
дропнуть много таблиц
    #32168908
Elsid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть представление ALL_TABLES из которого можно выбрать название таблиц по маске select ... where table_name like 'INZ%' and owner = 'USER1'
а дальше в процедуре описываете курсор, и по fetch , формируете динамический SQL, который успешно выполняете.

Вот Вам пример DBMS_SQL.

Rem Copyright (c) 1995, 1996, 1997 by Oracle Corp. All Rights Reserved.
Rem
Rem NAME
Rem owadsyn.sql - OWA Drop public SYNonyms
Rem PURPOSE
Rem Drop the public OWA synonyms used by the PL/SQL
Rem gateway.
Rem NOTES
Rem This script should be run as sys.
Rem history
Rem pkapasi 09/07/00 - Ignore drop errors for SQL*Plus and svrmgrl
Rem rdecker 07/21/00 - split off from owacomm.sql
Rem

DECLARE
-- procedure executes a DDL and ignores errors if any.
PROCEDURE execute_ddl(ddl_statement VARCHAR2) IS
ddl_cursor INTEGER;
BEGIN
-- try to execute DDL
ddl_cursor := dbms_sql.open_cursor;

-- issue the DDL statement
dbms_sql.parse (ddl_cursor, ddl_statement, dbms_sql.native);
dbms_sql.close_cursor (ddl_cursor);
EXCEPTION
-- ignore exceptions
when others then
if (dbms_sql.is_open(ddl_cursor)) then
dbms_sql.close_cursor(ddl_cursor);
end if;
END;

BEGIN
execute_ddl ('drop public synonym OWA_CUSTOM');
execute_ddl ('drop public synonym OWA_GLOBAL');
execute_ddl ('drop public synonym OWA');
execute_ddl ('drop public synonym HTF');
execute_ddl ('drop public synonym HTP');
execute_ddl ('drop public synonym OWA_COOKIE');
execute_ddl ('drop public synonym OWA_IMAGE');
execute_ddl ('drop public synonym OWA_OPT_LOCK');
execute_ddl ('drop public synonym OWA_PATTERN');
execute_ddl ('drop public synonym OWA_SEC');
execute_ddl ('drop public synonym OWA_TEXT');
execute_ddl ('drop public synonym OWA_UTIL');
execute_ddl ('drop public synonym OWA_INIT');
execute_ddl ('drop public synonym OWA_CACHE');
execute_ddl ('drop public synonym WPG_DOCLOAD');
END;
/



Или если у Вас свежая версия оракла:

declare
cursor c is select table_name from all_tables
where owner = '...' and
like 'MASK%';
begin
for c_rec in c loop
execute immediate 'drop table "' || c_rec.table_name || '"' ;
end loop;
end;
...
Рейтинг: 0 / 0
дропнуть много таблиц
    #32168922
Elsid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написать процедуру и подвесить в джоб.
...
Рейтинг: 0 / 0
дропнуть много таблиц
    #32168933
Elsid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для того чтобы видеть dba_tables , нужно иметь привелегии на это представление.
Правило второе.
Не нужно давать лишние привелегии это бывет опасно.
to softbuilder@inbox.ru
...
Рейтинг: 0 / 0
дропнуть много таблиц
    #32169034
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Elsid:

"Не нужно давать лишние привелегии это бывет опасно.
to softbuilder@inbox.ru"

Во-первых, не учите меня жить.

Во-вторых из сообщения "....Не хочу давать своим юзерам такие привилегии, а самому чистить схемы по одной таблице лень..." ясно видно, что этот человек администратор БД, поэтому во всех отношениях есть смысл использовать dba_ вью, потому-что "чистить" будет он.
В крайнем случае человек сам разберётся откуда ему лучше брать.

В третьих, даже если он не DBA, а пусть даже девелопер, в любой литературе можно найти упоминание, что нужно сделать, что бы у девелопера был доступ к data dictionary - это дать привилегию SELECT_CATALOG_ROLE.

В четвёртых, ни один нормальный админ не будет такие административные вещи, как дропание таблиц помещать в PL/SQL код, а сделает это через такое родное и близкое ему до боли средство, как SQL*Plus.

Теперь если вы такой умный, приведите фактические и документальные доказательства, что хоть когда-нибудь наличие данной роли у девелопера прямо привело к опасности.
...
Рейтинг: 0 / 0
дропнуть много таблиц
    #32169181
zue
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to softbuilder:
спасибо, действительно просто до ужаса (ужас, потому что сам не докумекал). Просто зациклился на возможности передачи параметром в процедуре, а про родной spool выскочило из головы. Главное, что можно легко этот список редактировать перед запуском скрипта

to Elsid:
спасибо за скрипт. Попробую поизгаляться и поставить джобом. Насчет раздачи привилегий полностью согласен - так я их и не даю, из-за чего кутерьму и затеял!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / дропнуть много таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]