Cómo colocar todas las tablas de usuario?
-
18-09-2019 - |
Pregunta
¿Cómo puedo colocar todas las tablas de usuario en Oracle?
Tengo un problema con limitaciones. Cuando desactivo todo lo que es todavía no es posible.
Solución
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;
END;
/
Otros consejos
Si lo que desea es una manera muy simple de hacer esto .. Aquí es un script que he utilizado en el pasado
select 'drop table '||table_name||' cascade constraints;' from user_tables;
Esto imprimirá a cabo una serie de comandos de caída para todas las tablas en el esquema. En cola el resultado de esta consulta y ejecutarlo.
Fuente: https://forums.oracle.com/forums/thread.jspa?threadID=614090
Del mismo modo, si desea borrar más de las tablas se puede editar la siguiente para que se adapte a sus necesidades
select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')
Otra respuesta que trabajó 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. Lo hace 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.
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 sencilla es dejar caer el usuario propietario de los objetos con el comando en cascada.
DROP USER username CASCADE
La forma más sencilla sería la de dejar el espacio de tabla a continuación, crear el espacio de tabla hacia arriba. Pero prefiero no tener que hacer eso. Esto es similar a la de Henry excepto que acabo de hacer un copiar / pegar en el conjunto de resultados en mi interfaz gráfica de usuario.
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 de usuario
la cláusula SELECT generará una instrucción DROP para cada mesa
puede ejecutar la secuencia de comandos
Para eliminar todos los objetos en el oráculo:
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||' '||X.OBJECT_NAME|| ' CASCADE CONSTRAINT');
END LOOP;
FOR Y IN IY LOOP
EXECUTE IMMEDIATE('DROP '||Y.OBJECT_TYPE||' '||Y.OBJECT_NAME);
END LOOP;
FOR Z IN IZ LOOP
EXECUTE IMMEDIATE('DROP '||Z.OBJECT_TYPE||' '||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');