Là một phần của quá trình xây dựng và phát triển cơ sở dữ liệu của chúng tôi, tôi đang cố tạo một tập lệnh sẽ xóa tất cả các bảng và trình tự cho người dùng. Tôi không muốn tạo lại người dùng vì điều này sẽ yêu cầu nhiều quyền hơn mức cho phép.Thả tất cả các bảng/chuỗi người dùng trong Oracle
Tập lệnh của tôi tạo một quy trình để xóa các bảng/trình tự, thực thi quy trình và sau đó giảm quy trình. Tôi đang thực hiện các tập tin từ 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;
/
Thật không may, giảm các thủ tục gây ra một vấn đề. Dường như gây ra một tình trạng chủng tộc và thủ tục bị bỏ trước khi nó thực thi.
Ví dụ:
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
Mọi ý tưởng về cách làm việc này?
+1 này. không cần phải tạo thủ tục –
Điều này thực hiện thủ thuật. Thật kỳ lạ, tôi đã phải thêm một dấu/ở cuối kịch bản để thực sự thực thi khối PLSQL ẩn danh.Nếu sau này chúng ta tạo một nhiệm vụ MSBUILD tùy chỉnh để thực hiện các câu lệnh trong tập lệnh - thì các vấn đề/có gây ra không? – Ambience
/nói với sqlplus rằng khối PLSQL của bạn được thực hiện và gửi nó đến cơ sở dữ liệu để xử lý. Vì vậy, nếu MSBUILD của bạn sử dụng sqlplus, nó sẽ cần /. –