あなたの当面の質問に対する答えは、ORA-01031: insufficient privileges
を取得することです。 ユーザーにはロールを介して付与されたCREATETABLE権限があるため、Oracleセキュリティモデルでは、PL/SQLのロールを介して付与された権限を使用できないというルールが適用されます。したがって、DBAがCREATETABLE権限をユーザーに直接付与する必要があります。
それともあなたは?
あなたがやろうとしていることはOracleでは意味をなさないからです。 Oracleでは、グローバル一時テーブルは永続的です。 構造;一時的なのはそれらのデータだけです。したがって、正しい解決策は、他のデータベースオブジェクトと同様に、通常のDDLスクリプトを使用してテーブルを1回作成することです。次に、必要に応じてグローバル一時テーブルに挿入できます。
あなたはこのサイトでこの間違いを犯した最初の人ではありません(この関連するスレッドを読んでください)。多くの場合、ユーザーがSQL Serverなどの別のデータベースから来ているためです。このデータベースには、Oracleのグローバル一時テーブルとは実際には異なる「一時テーブル」と呼ばれる構造があります。それがシナリオの場合は、PrivateTemporaryTablesと呼ばれるOracle18cの新機能に関心があります。これらは、SQLServerの一時テーブルとまったく同じです。詳細をご覧ください。