2011-09-27 8 views
18

creo un archivo test.sql y en el interior pongo:Se obtiene un error al intentar alterar la mesa en un bloque SQL

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

No es esto permitido? Porque obtengo un error:

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 

Respuesta

34

No se puede emitir DDL como SQL estático en un bloque PL/SQL. Si usted quiere poner estos comandos en un bloque PL/SQL, que había necesidad de utilizar SQL dinámico, es decir

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

Puede ser más fácil, sin embargo, que acaba de emitir sentencias SQL consecutivos en lugar de emitir un solo PL/Bloque SQL.

+0

Gracias de nuevo. Hay demasiadas declaraciones para ejecutar de forma independiente :) – Victor

Cuestiones relacionadas