2011-09-27 14 views
18

crea un file test.sql e dentro ho messo:errore durante il tentativo di raggiungere alter table in un blocco SQL

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

Non è questo permesso? Perché ottengo l'errore:

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 

risposta

34

Non è possibile emettere DDL come SQL statico in un blocco PL/SQL. Se si vuole mettere questi comandi in un blocco PL/SQL, avresti bisogno di utilizzare SQL dinamico, vale a dire

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

Può essere più facile, però, di emettere solo le istruzioni SQL consecutivi piuttosto che l'emissione di un singolo PL/Blocco SQL.

+0

Grazie ancora. Ci sono troppe istruzioni da eseguire in modo indipendente :) – Victor

Problemi correlati