La risposta alla tua domanda immediata è che ottieni ORA-01031: insufficient privileges
perché il tuo utente ha il privilegio CREATE TABLE concesso tramite un ruolo:il modello di sicurezza Oracle applica una regola secondo cui non possiamo utilizzare i privilegi concessi tramite ruoli in PL/SQL. Quindi hai bisogno del tuo DBA per concedere il privilegio CREATE TABLE al tuo utente direttamente.
O tu?
Perché quello che stai cercando di fare non ha senso in Oracle. In Oracle le tabelle temporanee globali sono permanenti strutture; sono solo i dati in essi che sono temporanei. Quindi, la soluzione corretta è creare la tabella una volta con un normale script DDL, come qualsiasi altro oggetto di database. Quindi puoi semplicemente inserirlo nella tabella temporanea globale di cui hai bisogno.
Non sei la prima persona su questo sito a commettere questo errore (leggi questo thread pertinente). Spesso è perché le persone provengono da un altro database come SQL Server che ha un costrutto chiamato "tabella temporanea" che in realtà è diverso dalle tabelle temporanee globali di Oracle. Se questo è il tuo scenario, sarai interessato a una nuova funzionalità di Oracle 18c chiamata Tabelle temporanee private. Questi sono esattamente analoghi alle tabelle temporanee di SQL Server. Scopri di più.