单独执行成功,放在触发器中报错?解决办法
单独执行成功,放在触发器中报错?
创建用户登出之前的触发器统计用户登出时的信息,代码如下
提示:表或视图不存在。
然而,单独执行报错的语句
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;
没有出错,提交事务成功。
想问下这是什么情况?
------解决方案--------------------
权限的问题,你执行用的这个用户有权限,但是触发器所在的用户没有权限。授权解决。
------解决方案--------------------
需要显示授权、
------解决方案--------------------
显式授权
------解决方案--------------------
楼上所说的授权问题
------解决方案--------------------
你开发程序就只能是复制,粘贴,然后等着命运保佑它不出错?
你里面写select ,就GRANT select ANY TABLE TO jh;
写update,就GRANT UPDATE ANY TABLE TO jh;
你将来再个delete,都写全了你不还是报错?
创建用户登出之前的触发器统计用户登出时的信息,代码如下
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;
没有出错,提交事务成功。
想问下这是什么情况?
------解决方案--------------------
权限的问题,你执行用的这个用户有权限,但是触发器所在的用户没有权限。授权解决。
------解决方案--------------------
需要显示授权、
------解决方案--------------------
显式授权
------解决方案--------------------
楼上所说的授权问题
------解决方案--------------------
你开发程序就只能是复制,粘贴,然后等着命运保佑它不出错?
你里面写select ,就GRANT select ANY TABLE TO jh;
写update,就GRANT UPDATE ANY TABLE TO jh;
你将来再个delete,都写全了你不还是报错?