Mover tablas con subparticiones

Supongamos que tenemos una tabla llamada AGENTE , esta tabla agente está particionada por número de agente, y a su vez, particionada por trimestre.
Así pues tendremos que la estructura es mas o menos
PARTICIONADO

Y queremos mover estas particiones a un nuevo tablespace (TS_NEW). Lo primero que se nos pasa por la cabeza es el ejecutar:

alter table PROPIETARIO.AGENTE move partition  AG1  tablespace TS_NEW;

Pero Oracle nos devolverá el error

Error at line 1
ORA-14257: no se puede mover una partición que no sea de Rango, Lista, Sistema o Hash

Lo primero que nos viene a la cabeza es el preguntarnos donde está el error e ir a comprobar que tipo de partición tenemos, sin embargo, si aplicamos un poco el sentido común, veremos que lo que nos está indicando este error es que debemos de mover nuestra tabla subparticion a subparticion .
La sintaxsis correcta será:

alter table PROPIETARIO.AGENTE 
	move subpartition  PRIMER1
			tablespace TS_NEW;
alter table PROPIETARIO.AGENTE 
	move subpartition  PRIMER2 
				tablespace TS_NEW;
alter table PROPIETARIO.AGENTE
		move subpartition
			PRIMER3 tablespace TS_NEW;

Esta tarea puede ser realmente tediosa si nuestra tabla tiene un gran número de particiones y subparticiones, con lo que, lo mejor será hacer un script para moverla.
Lo primero que ha de hacerse en estos casos, es guardar la manera de volver a la situacion actual, esto lo conseguiremos con la salida del comando

select 'alter table'||
	    table_owner||
		'.'||
		table_name||
		' move subpartition '
		||subpartition_name||
		' tablespace '
		|| tablespace_name||
		' ;'
     		from  DBA_TAB_SUBPARTITIONS
   			where table_name='TABLA'

Una vez hemos guardado esta salida, podemos pasar a generar el script que nos moverá todas las subparticiones al nuevo tablespace TS_NEW

select 'alter table '
		||table_owner||
		'.'
		||table_name||
		' move subpartition '
		||subpartition_name||
		' tablespace 
		TS_NEW;' 
		    from  DBA_TAB_SUBPARTITIONS 
			 where table_name='TABLA'

Como siempre, mas información en la documentación de Oracle