2011-09-27 18 views
18

utworzyć plik test.sql i wewnątrz kładę:Uzyskiwanie błąd podczas próby alter table w bloku sql

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

Czy nie jest to dozwolone? Ponieważ pojawia się błąd:

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 

Odpowiedz

34

Nie można wydać DDL jako statycznego SQL w bloku PL/SQL. Jeśli chcesz umieścić te polecenia w bloku PL/SQL, trzeba by użyć dynamicznego SQL, tj

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

może być łatwiej, jednak po prostu wydać kolejne instrukcje SQL zamiast wydawania pojedynczego PL/Blok SQL.

+0

Jeszcze raz dziękuję. Jest zbyt wiele instrukcji do wykonania niezależnie :) – Victor

Powiązane problemy