Има и други опции освен V('APP_USER'). От Apex 5, APP_USER се съхранява в sys_context и това е много по-производително от функцията V(). Предлага се като SYS_CONTEXT('APEX$SESSION','APP_USER')
.
Работи и като стойност по подразбиране за таблици:
create table test_table
(col_1 VARCHAR2(100) DEFAULT SYS_CONTEXT('APEX$SESSION','APP_USER'));
Table TEST_TABLE created.
Като се има предвид това, най-добрата практика за колони за одит е тригер, който попълва 4-те колони за одит (както предложи @Littlefoot). Разгледайте quicksql (под SQL Workshop> Utilities или на livesql.oracle.com). Можете да го накарате да генерира тригерите вместо вас, ако зададете „включване на колони за проверка“ и „Активиран Apex“. Пример за такъв генериран тригер е:
create or replace trigger employees_biu
before insert or update
on employees
for each row
begin
if inserting then
:new.created := sysdate;
:new.created_by := nvl(sys_context('APEX$SESSION','APP_USER'),user);
end if;
:new.updated := sysdate;
:new.updated_by := nvl(sys_context('APEX$SESSION','APP_USER'),user);
end employees_biu;
/