日期:2014-05-17  浏览次数:20845 次

单独执行成功,放在触发器中报错?
创建用户登出之前的触发器统计用户登出时的信息,代码如下
create or replace trigger logoff_trigger
  before logoff on database
begin
 update stats$user_log
     set last_module =
         (select module
            from v$session 

           where sys_context('USERENV', 'SESSIONID') = audsid)
    where sys_context('USERENV', 'SESSIONID') = session_id;

  update stats$user_log
     set logoff_day = sysdate
   where sys_context('USERENV', 'SESSIONID') = session_id;

  update stats$user_log
     set logoff_time = to_char(sysdate, 'hh24:mi:ss')
   where sys_context('USERENV', 'SESSIONID') = session_id;

  update stats$user_log
     set elapsed_minutes = round((logoff_day - logon_day) * 1440)
   where sys_context('USERENV', 'SESSIONID') = session_id;
end;


提示:表或视图不存在。

然而,单独执行报错的语句
 update stats$user_log
     set last_module =
         (select module
            from v$session 

           where sys_context('USERENV', 'SESSIONID') = audsid)
    where sys_context('USERENV', 'SESSIONID') = session_id;
没有出错,提交事务成功。
想问下这是什么情况?

------解决方案--------------------
权限的问题,你执行用的这个用户有权限,但是触发器所在的用户没有权限。授权解决。
------解决方案--------------------
需要显示授权、
------解决方案--------------------
引用:
需要显示授权、

显式授权
------解决方案--------------------
楼上所说的授权问题
------解决方案--------------------
引用:
Quote: 引用:

GRANT UPDATE ANY TABLE TO jh;

你压根就没看明白楼上说什么。

试了下,你给的sql语句,结果是:依然报错,呵呵


你开发程序就只能是复制,粘贴,然后等着命运保佑它不出错?

你里面写select ,就GRANT select ANY TABLE TO