Er zijn andere opties dan V('APP_USER'). Sinds Apex 5 wordt de APP_USER opgeslagen in de sys_context en dat is een stuk performanter dan de V()-functie. Het is beschikbaar als SYS_CONTEXT('APEX$SESSION','APP_USER')
.
Het werkt ook als een standaardwaarde voor tabellen:
create table test_table
(col_1 VARCHAR2(100) DEFAULT SYS_CONTEXT('APEX$SESSION','APP_USER'));
Table TEST_TABLE created.
Dat gezegd hebbende, de beste werkwijze voor controlekolommen is een trigger die de 4 controlekolommen vult (zoals @Littlefoot suggereerde). Kijk eens naar quicksql (onder SQL Workshop> Utilities of op livesql.oracle.com). U kunt het de triggers voor u laten genereren als u "controlekolommen opnemen" en "Apex ingeschakeld" instelt. Een voorbeeld van zo'n gegenereerde trigger is:
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;
/