Dans le cadre de notre processus de génération et de l'évolution de la base de données, j'essaie de créer un script qui supprimera toutes les tables et séquences d'un utilisateur. Je ne veux pas faire recréer l'utilisateur car cela nécessitera plus d'autorisations que permis.Suppression de toutes les tables/séquences utilisateur dans Oracle
Mon script crée une procédure pour supprimer les tables/séquences, exécute la procédure, puis supprime la procédure. Je l'exécution du fichier de 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;
/
Malheureusement, laissant tomber la procédure pose un problème. Il semble provoquer une condition de concurrence et la procédure est abandonnée avant son exécution.
.: par exemple
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
Toutes les idées sur la façon d'obtenir ce travail?
+1 ceci. pas besoin de créer la procédure –
Cela fait l'affaire. Bizarrement, j'ai dû ajouter une fin/à la fin du script pour exécuter le bloc PLSQL anonyme.Si nous créons plus tard une tâche MSBUILD personnalisée pour exécuter des instructions dans le script, est-ce que/causera des problèmes? – Ambience
Le/dit à sqlplus que votre bloc PLSQL est terminé, et de le soumettre à la base de données pour traitement. Donc, si votre MSBUILD utilise sqlplus, il aura besoin de /. –