Svaret på din omedelbara fråga är att du får ORA-01031: insufficient privileges
eftersom din användare har CREATE TABLE-behörigheten beviljad genom en roll:Oracles säkerhetsmodell tillämpar en regel att vi inte kan använda privilegier som beviljas genom roller i PL/SQL. Så du behöver din DBA för att ge din användare privilegiet CREATE TABLE direkt.
Eller gör du det?
För det du försöker göra är inte vettigt i Oracle. I Oracle är globala temporära tabeller permanenta strukturer; det är bara data i dem som är tillfälliga. Så den korrekta lösningen är att bygga tabellen en gång med ett normalt DDL-skript, som vilket annat databasobjekt som helst. Sedan kan du bara infoga i den globala temporära tabellen som du behöver.
Du är inte den första personen på denna sida som gör detta misstag (läs denna relevanta tråd). Ofta beror det på att folk kommer från en annan databas som SQL Server som har en konstruktion som kallas "temporary table" som faktiskt skiljer sig från Oracles globala temporära tabeller. Om det är ditt scenario kommer du att vara intresserad av en ny funktion i Oracle 18c som heter Private Temporary Tables. Dessa är exakt analoga med temporära SQL Server-tabeller. Ta reda på mer.