Как я могу отбросить все пользовательские таблицы в oracle?
У меня проблема с ограничениями. Когда я отключу все, это все еще невозможно.
BEGIN
FOR cur_rec IN (SELECT object_name, object_type
FROM user_objects
WHERE object_type IN
('TABLE',
'VIEW',
'PACKAGE',
'PROCEDURE',
'FUNCTION',
'SEQUENCE',
'SYNONYM',
'PACKAGE BODY'
))
LOOP
BEGIN
IF cur_rec.object_type = 'TABLE'
THEN
EXECUTE IMMEDIATE 'DROP '
|| cur_rec.object_type
|| ' "'
|| cur_rec.object_name
|| '" CASCADE CONSTRAINTS';
ELSE
EXECUTE IMMEDIATE 'DROP '
|| cur_rec.object_type
|| ' "'
|| cur_rec.object_name
|| '"';
END IF;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ( 'FAILED: DROP '
|| cur_rec.object_type
|| ' "'
|| cur_rec.object_name
|| '"'
);
END;
END LOOP;
END;
/
Если вам просто нужен действительно простой способ сделать это. Heres a script, который я использовал в прошлом
select 'drop table '||table_name||' cascade constraints;' from user_tables;
Это приведет к выписке серии команд удаления для всех таблиц в схеме. Катите результат этого запроса и выполняйте его.
Источник: https://forums.oracle.com/forums/thread.jspa?threadID=614090
Аналогично, если вы хотите очистить больше, чем таблицы, вы можете отредактировать следующее в соответствии с вашими потребностями.
select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')
Другой ответ, который работал у меня, - это (кредит http://snipt.net/Fotinakis/drop-all-tables-and-constraints-within-an-oracle-schema/)
BEGIN
FOR c IN (SELECT table_name FROM user_tables) LOOP
EXECUTE IMMEDIATE ('DROP TABLE "' || c.table_name || '" CASCADE CONSTRAINTS');
END LOOP;
FOR s IN (SELECT sequence_name FROM user_sequences) LOOP
EXECUTE IMMEDIATE ('DROP SEQUENCE ' || s.sequence_name);
END LOOP;
END;
Обратите внимание, что это работает сразу же после его запуска. Он НЕ создает script, который вам нужно вставить где-нибудь (как и другие ответы здесь). Он работает непосредственно на БД.
'DROP TABLE "' || c.table_name || '" CASCADE CONSTRAINTS'
. Это необходимо, если имена таблиц строчные.
begin
for i in (select 'drop table '||table_name||' cascade constraints' tbl from user_tables)
loop
execute immediate i.tbl;
end loop;
end;
Самый простой способ - удалить пользователя, которому принадлежат объекты с помощью команды каскада.
DROP USER username CASCADE
Самый простой способ - сбросить табличное пространство, а затем создать резервное копирование табличного пространства. Но я не хочу этого делать. Это похоже на Генри, за исключением того, что я просто делаю копию/пасту на наборе результатов в моем gui.
SELECT
'DROP'
,object_type
,object_name
,CASE(object_type)
WHEN 'TABLE' THEN 'CASCADE CONSTRAINTS;'
ELSE ';'
END
FROM user_objects
WHERE
object_type IN ('TABLE','VIEW','PACKAGE','PROCEDURE','FUNCTION','SEQUENCE')