我正在尝试使用v('app\u user')作为列的默认值。我明白了 null
当我在select like中使用它时
select v('APP_USER') from dual;
但当我在下面的列中使用它作为默认值时,我得到了一个错误。
create table test_table (col_1 varchar2(50) default NVL(v('APP_USER'), SYS_CONTEXT('USERENV','OS_USER')));
错误
create table test_table (col_1 varchar2(50) default NVL(v('APP_USER'), SYS_CONTEXT('USERENV','OS_USER')))
Error report -
ORA-04044: procedure, function, package, or type is not allowed here
04044. 00000 - "procedure, function, package, or type is not allowed here"
* Cause: A procedure, function, or package was specified in an
inappropriate place in a statement.
* Action: Make sure the name is correct or remove it.
有人能解释一下吗?或者有个转机??
2条答案
按热度按时间bweufnob1#
除了v('app\u user'),还有其他选项。自apex 5以来,app\u用户存储在sys\u上下文中,这比v()函数的性能要好得多。它可以作为
SYS_CONTEXT('APEX$SESSION','APP_USER')
.它还用作表的默认值:
也就是说,审计列的最佳实践是填充4个审计列的触发器(正如@littlefoot所建议的)。看看quicksql(在sql workshop>utilities下或livesql.oracle.com上)。如果您设置“includeauditcolumns”和“apex enabled”,您可以让它为您生成触发器。这种生成的触发器的一个例子是:
rqqzpn5f2#
一种选择是使用数据库触发器,例如。