Como parte de nuestro proceso de construcción y base de datos en evolución, estoy tratando de crear un script que eliminará todas las tablas y secuencias para un usuario. No quiero volver a crear el usuario ya que esto requerirá más permisos de los permitidos.todos los usuarios mesas/secuencias en Oracle
Mi secuencia de comandos crea un procedimiento para eliminar las tablas/secuencias, ejecuta el procedimiento y luego descarta el procedimiento. Estoy ejecutando el archivo 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;
/
Desafortunadamente, dejando caer el procedimiento causa un problema. Parece que causa una condición de carrera y el procedimiento se descarta antes de que se ejecute.
ej .:
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
¿Alguna idea sobre cómo conseguir este trabajo?
+1 esto. no es necesario crear el procedimiento –
Esto hace el truco. Curiosamente, tuve que agregar un final/al final del script para ejecutar realmente el bloque PLSQL anónimo.Si luego creamos una tarea MSBUILD personalizada para ejecutar las instrucciones en el script, ¿causarán/causarán problemas? – Ambience
El/dice sqlplus que su bloque PLSQL está hecho, y para enviarlo a la base de datos para su procesamiento. Entonces, si su MSBUILD usa sqlplus necesitará el /. –