每当有人删除用户时,我都必须记录删除用户的人。因此创建了一个触发器,通过SYS_CONTEXT获取IP地址(' USERENV',' IP_ADDRESS')。但是,触发器插入0.0.0.0而不是实际删除的IP地址。我该如何解决这个问题?
答案 0 :(得分:1)
我找到了解决方案:
select UTL_INADDR.get_host_address(SYS_CONTEXT('USERENV', 'HOST')) into ip_address from dual;
它使用Oracle的内部功能。
坦克。
答案 1 :(得分:0)
您很可能在本地连接到Oracle实例而不使用Oracle Net TCP / IP服务。在这种情况下,SYS_CONTEXT('USERENV', 'IP_ADDRESS')
为NULL
。
例如,当我通过LAN连接到我的Oracle实例时:
# using remote TCP connection:
sh$ sqlplus sylvain@oracle.lan.local
SQL> select coalesce(SYS_CONTEXT('USERENV', 'IP_ADDRESS'), 'NULL') from dual;
-> 10.1.2.3
当我在Oracle主机上本地做同样的事情时:
# using IPC connection:
sh$ sqlplus sylvain
SQL> select coalesce(SYS_CONTEXT('USERENV', 'IP_ADDRESS'), 'NULL') from dual;
-> NULL
但这样做会按预期工作:
# using local TCP connection:
sh$ sqlplus sylvain@localhost
SQL> select coalesce(SYS_CONTEXT('USERENV', 'IP_ADDRESS'), 'NULL') from dual;
-> 127.0.0.1