Come parte del nostro processo di compilazione e del database in evoluzione, sto cercando di creare uno script che rimuova tutte le tabelle e le sequenze per un utente. Non voglio ricreare l'utente in quanto richiede più autorizzazioni di quelle consentite.Eliminazione di tutte le tabelle/sequenze utente in Oracle
Il mio script crea una procedura per eliminare le tabelle/sequenze, esegue la procedura e quindi elimina la procedura. Sto eseguendo il file da sqlplus:
DROP.SQL:
create or replace procedure drop_all_cdi_tables
is
cur integer;
begin
cur:= dbms_sql.OPEN_CURSOR();
for t in (select table_name from user_tables) loop
execute immediate 'drop table ' ||t.table_name|| ' cascade constraints';
end loop;
dbms_sql.close_cursor(cur);
cur:= dbms_sql.OPEN_CURSOR();
for t in (select sequence_name from user_sequences) loop
execute immediate 'drop sequence ' ||t.sequence_name;
end loop;
dbms_sql.close_cursor(cur);
end;
/
execute drop_all_cdi_tables;
/
drop procedure drop_all_cdi_tables;
/
Purtroppo, lasciando cadere la procedura causa un problema. Sembra che ci sia una condizione di competizione e la procedura viene abbandonata prima dell'esecuzione.
Es .:
SQL*Plus: Release 11.1.0.7.0 - Production on Tue Mar 30 18:45:42 2010 Copyright (c) 1982, 2008, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Procedure created. PL/SQL procedure successfully completed. Procedure created. Procedure dropped. drop procedure drop_all_user_tables * ERROR at line 1: ORA-04043: object DROP_ALL_USER_TABLES does not exist SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64 With the Partitioning, OLAP, Data Mining and Real Application Testing options
Tutte le idee su come ottenere questo lavoro?
+1 questo. non c'è bisogno di creare la procedura –
Questo fa il trucco. Stranamente, ho dovuto aggiungere un finale/alla fine dello script per eseguire effettivamente il blocco PLSQL anonimo.Se successivamente creiamo un'attività MSBUILD personalizzata per l'esecuzione di istruzioni nello script, il/causerà problemi? – Ambience
// indica a sqlplus che il blocco PLSQL è stato eseguito e di inviarlo al database per l'elaborazione. Quindi se il tuo MSBUILD usa sqlplus avrà bisogno del /. –