小白今天以sys用户执行一条sql语句,报错如下:
GRANT EXECUTE ON SYS.KILL_SESSION TO wsj;
*ERROR at line 1:
ORA-04042: procedure, function, package, or package body does not exist
报错信息显示,某个存储过程,函数,package,package body不存在,小白细想了一下,这里所说的错误对象应该是SYS.KILL_SESSION,而sys是用户,也就是说sys用户下,没有KILL_SESSION的存储过程或者函数或者package或者package body??
于是小白去另外一个环境linux01中执行了sql语句:GRANT EXECUTE ON SYS.KILL_SESSION TO wsj; 执行成功,在linux101上面查看了一下KILL_SESSION到底是什么对象,查找结果:Procedure
在linux101上面找到了KILL_SESSION相应的sql语句,如下:
create or replace procedure kill_session
(
sessionid in varchar2 --session id
)
is
session varchar2(200);
str1 varchar2(255);
str2 varchar2(255);
begin
session := sessionid;
str1 := ' alter system kill session ';
str2 := str1 || '''' || session || '''';
--dbms_output.put_line(str2);
execute immediate str2;
end kill_session;
在那个sql语句执行不了的环境把上面德sql刷进去,问题解决:
SQL> grant EXECUTE ON SYS.KILL_SESSION TO wsj;
Grant succeeded.