Come posso eliminare tutte le tabelle utente in oracle?Come eliminare tutte le tabelle utente?
Ho problemi con i vincoli. Quando disabilito tutto non è ancora possibile.
Come posso eliminare tutte le tabelle utente in oracle?Come eliminare tutte le tabelle utente?
Ho problemi con i vincoli. Quando disabilito tutto non è ancora possibile.
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;
/
dipende da cosa hai intenzione di fare. puoi anche utilizzare drop user cascade ma devi ricreare l'utente. –
Questo ha funzionato molto bene e non richiede che io abbia l'autorizzazione sul server Oracle per eliminare e riaggiungere il mio utente. Bravo. Bella risposta. – djangofan
ha funzionato immediatamente fuori dagli schemi! Grazie –
Il modo più semplice è far cadere l'utente che possiede gli oggetti con il comando cascade.
DROP USER username CASCADE
Questo non è il metodo giusto. Questo è un metodo per eliminare un utente quando l'utente ha creato oggetti, che richiede l'uso di CASCADE per eliminare le tabelle degli utenti prima che l'utente venga eliminato. Cancellare l'utente non è la domanda che ha chiesto. – djangofan
Raggiunge in modo molto efficace l'obiettivo, in particolare se lo schema è di grandi dimensioni. Sembra che nel tuo caso evitare qualsiasi comunicazione con il tuo DBA sia una priorità assoluta. Preferisco le soluzioni che favoriscono una relazione con il tuo DBA, in particolare se non hai i privilegi DBA. –
@Brian si presume sbagliato.A volte non esiste un DBA o è in un'altra compagnia. O il caso più comune - non ti darà l'accesso per fare ciò che ti serve. – kazanaki
Il modo più semplice sarebbe quello di eliminare lo spazio tabella e quindi ripristinare lo spazio tabella. Ma preferirei non doverlo fare. Questo è simile a quello di Henry, tranne che faccio solo una copia/incolla sul set di risultati nella mia 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')
Un'altra risposta che ha funzionato per me è (credito per 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;
Nota che questo funziona subito dopo lo si esegue. Lo standard NON produce uno script che è necessario incollare da qualche parte (come altre risposte qui). Funziona direttamente sul DB.
Questo funziona per me, ma ho dovuto citare il nome della tabella scrivendo ''DROP TABLE' '|| c.table_name ||'" CASCADE CONSTRAINTS''. Questo è necessario, se i nomi delle tabelle sono in minuscolo. – ceving
@ bello bello sapere questo! Uso solo le tabelle maiuscole, quindi non l'ho mai incontrato. – kazanaki
+1 @ceving anche nel caso in cui il nome della tabella sia una parola riservata. Inoltre, aggiungo 'PURGE' alla fine dell'istruzione' DROP'. – Tsar
Se si desidera solo un modo davvero semplice per fare questo .. Heres uno script che ho usato in passato
select 'drop table '||table_name||' cascade constraints;' from user_tables;
questo stampa una serie di comandi calo per tutte le tabelle nello schema. Spool il risultato di questa query ed eseguirlo.
Fonte: https://forums.oracle.com/forums/thread.jspa?threadID=614090
Allo stesso modo se si desidera cancellare più di tabelle è possibile modificare le seguenti in base alle proprie esigenze
select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')
begin
for i in (select 'drop table '||table_name||' cascade constraints' tbl from user_tables)
loop
execute immediate i.tbl;
end loop;
end;
Il modo più semplice per eliminare tutta la tabella in uno schema ..... –
Questa è la risposta eccellente. Grazie @ Stéphane Bruckert –
Che ne dite di far cadere i vincoli invece di disattivazione? –