Logged in as user scott, I set the following in my session:
EXEC DBMS_SESSION.SET_IDENTIFIER (client_id=>'vegardk');
Verify that your session info is set:
SELECT SYS_CONTEXT( 'USERENV', 'CLIENT_IDENTIFIER' ) "client identifier", SYS_CONTEXT( 'USERENV', 'CURRENT_USER' ) "current user" FROM DUAL;
client identifier | current user |
---|---|
vegardk | SCOTT |
The same information can be found in v$session, columnn CLIENT_IDENTIFIER.
There is also another column in v$session called CLIENT_INFO.
A value for this column can be generated by calling a different procedure, dbms_application_info.set_client_info.
For example:
exec dbms_application_info.set_client_info('Execute summary');Check v$session:
SELECT USERNAME,CLIENT_IDENTIFIER,CLIENT_INFO FROM V$SESSION WHERE USERNAME='SCOTT';
Result:
USERNAME | CLIENT_IDENTIFIER | CLIENT_INFO |
---|---|---|
SCOTT | vegardk | Execute summary |
A good way to pick up up any relevant session information already set is to use NVL:
SELECT NVL(SYS_CONTEXT( 'USERENV', 'CLIENT_IDENTIFIER' ), SYS_CONTEXT( 'USERENV', 'CURRENT_USER' )) FROM DUAL;If client_identifier is set, we pick up that value. If not, we use the current_user, which is always set.
This could also be used as a default value for a column definition:
CREATE TABLE T1 ( ... LAST_CHANGED_BY VARCHAR2(30 CHAR) DEFAULT NVL(SYS_CONTEXT( 'USERENV', 'CLIENT_IDENTIFIER' ), SYS_CONTEXT( 'USERENV', 'CURRENT_USER' )) NULL );
No comments:
Post a Comment