欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

独自执行成功,放在触发器中报错

更新时间: 2014-01-05 02:13:38 责任编辑: Author_N1

 

单独执行成功,放在触发器中报错?
创建用户登出之前的触发器统计用户登出时的信息,代码如下
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 jh;
写update,就GRANT UPDATE ANY TABLE TO jh;
你将来再个delete,都写全了你不还是报错?
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:13:38
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7188/
本文WWW.DOC100.NET DOC100.NET版权所有。