2011-09-27 30 views
18

tôi có thể tạo một tập tin test.sql và bên trong tôi đặt:Bắt lỗi khi cố gắng thay đổi bảng trong một khối sql

begin 
alter table table1 enable row movement; 
alter table table1 shrink space; 
end; 
/

Đây có phải là không được phép? Vì tôi gặp lỗi:

Encountered the symbol "ALTER" when expecting one of the following: 

    begin case declare exit for goto if loop mod null pragma 
    raise return select update while with <an identifier> 
    <a double-quoted delimited-identifier> <a bind variable> << 
    close current delete fetch lock insert open rollback 
    savepoint set sql execute commit forall merge pipe 

Trả lời

34

Bạn không thể phát DDL làm SQL tĩnh trong khối PL/SQL. Nếu bạn muốn đặt những lệnh trong một khối PL/SQL, bạn sẽ cần phải sử dụng SQL động, tức là

BEGIN 
    EXECUTE IMMEDIATE 'alter table table1 enable row movement'; 
    EXECUTE IMMEDIATE 'alter table table1 shrink space cascade'; 
END; 
/

Nó có thể được dễ dàng hơn, tuy nhiên, để chỉ hành câu lệnh SQL liên tiếp chứ không phải là phát hành một single PL/Khối SQL.

+0

Cảm ơn bạn một lần nữa. Có quá nhiều câu lệnh để thực thi độc lập :) – Victor

Các vấn đề liên quan