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

Quelle est la différence entre USER() et SYS_CONTEXT('USERENV','CURRENT_USER') ?

Du manuel à :http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions184.htm#SQLRF51825

CURRENT_USER

Le nom de l'utilisateur de la base de données dont les privilèges sont actuellement actifs. Cela peut changer pendant la durée d'une session pour refléter le propriétaire de tout objet de droits de définition actif. Lorsqu'aucun objet droits du définisseur n'est actif, CURRENT_USER renvoie la même valeur que SESSION_USER. Lorsqu'il est utilisé directement dans le corps d'une définition de vue, cela renvoie l'utilisateur qui exécute le curseur qui utilise la vue ; il ne respecte pas les vues utilisées dans le curseur comme étant des droits de définition.

SESSION_USER

Nom de l'utilisateur de la base de données lors de la connexion. Pour les utilisateurs d'entreprise, renvoie le schéma. Pour les autres utilisateurs, renvoie le nom d'utilisateur de la base de données. Cette valeur reste la même pendant toute la durée de la session.

Donc, il existe une différence entre SESSION_USER et CURRENT_USER, en particulier lorsque CURRENT_USER est utilisé dans une procédure stockée ou une fonction.

Je dois admettre que je ne sais pas ce que signifie le terme "utilisateur d'entreprise".

Au fait :il y en a un troisième :

SESSION_USERID

L'identifiant de l'utilisateur de la base de données lors de la connexion.