Oracle
 sql >> Base de données >  >> RDS >> Oracle

L'utilisateur du schéma Oracle ne peut pas créer de table dans la procédure

La réponse à votre question immédiate est que vous obtenez ORA-01031: insufficient privileges car votre utilisateur dispose du privilège CREATE TABLE accordé via un rôle :le modèle de sécurité Oracle applique une règle selon laquelle nous ne pouvons pas utiliser les privilèges accordés via des rôles dans PL/SQL. Vous avez donc besoin que votre DBA accorde directement le privilège CREATE TABLE à votre utilisateur.

Ou vous ?

Parce que ce que vous essayez de faire n'a pas de sens dans Oracle. Dans Oracle, les tables temporaires globales sont permanentes ouvrages d'art ; ce sont juste les données qu'ils contiennent qui sont temporaires. Ainsi, la bonne solution consiste à créer la table une fois avec un script DDL normal, comme tout autre objet de base de données. Ensuite, vous pouvez simplement insérer dans la table temporaire globale selon vos besoins.

Vous n'êtes pas la première personne sur ce site à faire cette erreur (lisez ce fil pertinent). C'est souvent parce que les gens viennent d'une autre base de données telle que SQL Server qui a une construction appelée "table temporaire" qui est en fait différente des tables temporaires globales d'Oracle. Si tel est votre scénario, vous serez intéressé par une nouvelle fonctionnalité d'Oracle 18c appelée Tables temporaires privées. Celles-ci sont exactement analogues aux tables temporaires SQL Server. En savoir plus.