Istnieją inne opcje niż V('APP_USER'). Od Apex 5, APP_USER jest przechowywany w sys_context i jest o wiele bardziej wydajny niż funkcja V(). Jest dostępny jako SYS_CONTEXT('APEX$SESSION','APP_USER')
.
Działa również jako wartość domyślna dla tabel:
create table test_table
(col_1 VARCHAR2(100) DEFAULT SYS_CONTEXT('APEX$SESSION','APP_USER'));
Table TEST_TABLE created.
Biorąc to pod uwagę, najlepszą praktyką dotyczącą kolumn audytu jest wyzwalacz, który wypełnia 4 kolumny audytu (jak sugeruje @Littlefoot). Zajrzyj do quicksql (w SQL Workshop> Utilities lub na livesql.oracle.com). Możesz wygenerować wyzwalacze, jeśli ustawisz „include Audit Columns” i „Apex Enabled”. Przykładem takiego wygenerowanego wyzwalacza jest:
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;
/