Svaret på dit umiddelbare spørgsmål er, at du får ORA-01031: insufficient privileges
fordi din bruger har CREATE TABLE-privilegiet givet gennem en rolle:Oracle-sikkerhedsmodellen håndhæver en regel om, at vi ikke kan bruge privilegier givet gennem roller i PL/SQL. Så du har brug for din DBA til at give din bruger CREATE TABLE-privilegiet direkte.
Eller gør du det?
For det, du prøver at gøre, giver ikke mening i Oracle. I Oracle er globale midlertidige tabeller permanente strukturer; det er kun dataene i dem, der er midlertidige. Så den korrekte løsning er at bygge tabellen én gang med et normalt DDL-script, som ethvert andet databaseobjekt. Så kan du bare indsætte i den globale midlertidige tabel, som du har brug for.
Du er ikke den første person på dette websted, der begår denne fejl (læs denne relevante tråd). Ofte er det fordi folk kommer fra en anden database såsom SQL Server, som har en konstruktion kaldet "temporary table", som faktisk er forskellig fra Oracles globale midlertidige tabeller. Hvis det er dit scenario, vil du være interesseret i en ny Oracle 18c-funktion kaldet Private Temporary Tables. Disse er nøjagtigt analoge med midlertidige SQL Server-tabeller. Få mere at vide.