Ci sono altre opzioni oltre a V('APP_USER'). Da Apex 5, APP_USER è archiviato in sys_context ed è molto più performante della funzione V(). È disponibile come SYS_CONTEXT('APEX$SESSION','APP_USER')
.
Funziona anche come valore predefinito per le tabelle:
create table test_table
(col_1 VARCHAR2(100) DEFAULT SYS_CONTEXT('APEX$SESSION','APP_USER'));
Table TEST_TABLE created.
Detto questo, la migliore pratica per le colonne di audit è un trigger che popola le 4 colonne di audit (come suggerito da @Littlefoot). Dai un'occhiata a quicksql (sotto SQL Workshop> Utilities o su livesql.oracle.com). Puoi fare in modo che generi i trigger per te se imposti "includi colonne di controllo" e "Apex abilitato". Un esempio di un tale trigger generato è:
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;
/