¿Cómo puedo descartar todas las tablas de usuario en Oracle?
Tengo problemas con las restricciones. Cuando desactivo todo, todavía no es posible.
¿Cómo puedo descartar todas las tablas de usuario en Oracle?
Tengo problemas con las restricciones. Cuando desactivo todo, todavía no es posible.
Respuestas:
BEGIN
FOR cur_rec IN (SELECT object_name, object_type
FROM user_objects
WHERE object_type IN
('TABLE',
'VIEW',
'MATERIALIZED 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;
FOR cur_rec IN (SELECT *
FROM all_synonyms
WHERE table_owner IN (SELECT USER FROM dual))
LOOP
BEGIN
EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM ' || cur_rec.synonym_name;
END;
END LOOP;
END;
/
Si solo quieres una forma realmente simple de hacer esto ... Aquí hay un guión que he usado en el pasado
select 'drop table '||table_name||' cascade constraints;' from user_tables;
Esto imprimirá una serie de comandos de caída para todas las tablas del esquema. Agrupe el resultado de esta consulta y ejecútelo.
Fuente: https://forums.oracle.com/forums/thread.jspa?threadID=614090
Del mismo modo, si desea borrar más de las tablas, puede editar lo siguiente para satisfacer sus necesidades
select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')
Otra respuesta que funcionó para mí es (crédito a 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;
Tenga en cuenta que esto funciona inmediatamente después de ejecutarlo. No NO producir una secuencia de comandos que necesita para pegar en alguna parte (al igual que otras respuestas aquí). Se ejecuta directamente en la base de datos.
'DROP TABLE "' || c.table_name || '" CASCADE CONSTRAINTS'
. Esto es necesario si los nombres de las tablas son minúsculas.
PURGE
al final de la DROP
declaración.
begin
for i in (select 'drop table '||table_name||' cascade constraints' tbl from user_tables)
loop
execute immediate i.tbl;
end loop;
end;
La forma más simple es descartar al usuario que posee los objetos con el comando en cascada.
DROP USER username CASCADE
USER
es separado de a DATABASE
. DROP USER username CASCADE
trabajó para mi. Pero en MySQL todo lo que tendría que hacer es DROP DATABASE
crear uno nuevo
La forma más fácil sería soltar el espacio de tabla y luego volver a crearlo. Pero prefiero no tener que hacer eso. Esto es similar al de Henry, excepto que solo hago una copia / pego en el conjunto de resultados en mi 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')
SELECT 'DROP TABLE "' || TABLE_NAME || '" CASCADE CONSTRAINTS;'
FROM user_tables;
user_tables
es una tabla del sistema que contiene todas las tablas del usuario, la cláusula SELECT generará una declaración DROP para cada tabla en la que pueda ejecutar el script
Para eliminar todos los objetos en Oracle:
1) dinámico
DECLARE
CURSOR IX IS
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE ='TABLE'
AND OWNER='SCHEMA_NAME';
CURSOR IY IS
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE
IN ('SEQUENCE',
'PROCEDURE',
'PACKAGE',
'FUNCTION',
'VIEW') AND OWNER='SCHEMA_NAME';
CURSOR IZ IS
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('TYPE') AND OWNER='SCHEMA_NAME';
BEGIN
FOR X IN IX LOOP
EXECUTE IMMEDIATE('DROP '||X.OBJECT_TYPE||' SCHEMA_NAME.'||X.OBJECT_NAME|| ' CASCADE CONSTRAINT');
END LOOP;
FOR Y IN IY LOOP
EXECUTE IMMEDIATE('DROP '||Y.OBJECT_TYPE||' SCHEMA_NAME.'||Y.OBJECT_NAME);
END LOOP;
FOR Z IN IZ LOOP
EXECUTE IMMEDIATE('DROP '||Z.OBJECT_TYPE||' SCHEMA_NAME.'||Z.OBJECT_NAME||' FORCE ');
END LOOP;
END;
/
2) estático
SELECT 'DROP TABLE "' || TABLE_NAME || '" CASCADE CONSTRAINTS;' FROM user_tables
union ALL
select 'drop '||object_type||' '|| object_name || ';' from user_objects
where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION')
union ALL
SELECT 'drop '
||object_type
||' '
|| object_name
|| ' force;'
FROM user_objects
WHERE object_type IN ('TYPE');
Por favor siga los pasos a continuación.
begin
for i in (select 'drop table '||table_name||' cascade constraints' tb from user_tables)
loop
execute immediate i.tb;
end loop;
commit;
end;
purge RECYCLEBIN;