La respuesta a su pregunta inmediata es que obtiene ORA-01031: insufficient privileges
porque su usuario tiene el privilegio CREATE TABLE otorgado a través de un rol:el modelo de seguridad de Oracle impone una regla que no podemos usar privilegios otorgados a través de roles en PL/SQL. Por lo tanto, necesita que su DBA otorgue el privilegio CREAR TABLA a su usuario directamente.
¿O tú?
Porque lo que estás tratando de hacer no tiene sentido en Oracle. En Oracle, las tablas temporales globales son permanentes estructuras; son solo los datos en ellos que son temporales. Entonces, la solución correcta es construir la tabla una vez con un script DDL normal, como cualquier otro objeto de base de datos. Luego puede simplemente insertar en la tabla temporal global según lo necesite.
No es la primera persona en este sitio que comete este error (lea este hilo pertinente). A menudo se debe a que las personas provienen de otra base de datos, como SQL Server, que tiene una construcción llamada "tabla temporal", que en realidad es diferente de las tablas temporales globales de Oracle. Si ese es su escenario, entonces estará interesado en una nueva característica de Oracle 18c llamada Tablas Temporales Privadas. Estas son exactamente análogas a las tablas temporales de SQL Server. Obtenga más información.