W ramach procesu budowania i rozwijania bazy danych próbuję utworzyć skrypt, który usunie wszystkie tabele i sekwencje dla użytkownika. Nie chcę odtwarzać użytkownika, ponieważ będzie to wymagało więcej uprawnień, niż jest to dozwolone.Zrzucanie wszystkich tabel/sekwencji użytkowników w Oracle
Mój skrypt tworzy procedurę upuszczania tabel/sekwencji, wykonuje procedurę, a następnie zrzuca procedurę. Ja uruchomieniu pliku z 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;
/
Niestety, upuszczenie procedury powoduje problem. Wydaje się, że powoduje to wyścig, a procedura zostaje przerwana, zanim zostanie wykonana.
Np .:
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
Wszelkie pomysły, w jaki sposób uzyskać tej pracy?
+1 to. nie ma potrzeby tworzenia procedury –
To robi lewę. Dziwne, musiałem dodać koniec/koniec skryptu, aby faktycznie wykonać anonimowy blok PLSQL.Jeśli później utworzymy niestandardowe zadanie MSBUILD w celu wykonania instrukcji w skrypcie - czy/spowoduje to problemy? – Ambience
/mówi sqlplus, że twój blok PLSQL jest zrobiony, i przesyła go do bazy danych w celu przetworzenia. Więc jeśli twój MSBUILD używa sqlplus to będzie potrzebował /. –