Procedure中userA访问userB的问题
create or replace procedure MT
is
v_Id varchar2(15);
cursor get_id is select distinct(user_ID) from B.t_user_info;
begin
open get_id;
loop
fetch get_id into v_mobileid;
exit when get_id%notfound;
insert into A.mtuser1 (mid,begintime,processflag,priority) values(v_id,sysdate,0,1);
commit;
end loop;
close get_id;
end;
故障是编译了报错:必须说明标识符“B.t_user_info”
奇怪的在于,单独执行select distinct(user_ID) from B.t_user_info是可以得到结果的,为什么写成procedure就不可以编译?
A、B都是DBA身份,请问原因出在哪里?
问题点数:80、回复次数:5Top
1 楼ORARichard(没钱的日子......)回复于 2005-02-01 15:01:20 得分 0
create or replace procedure MT AUTHID CURRENT_USER is
...
Top
2 楼jsnicle(js_nicle)回复于 2005-02-01 15:06:29 得分 0
执行存贮过程的用户名是哪一个?
Top
3 楼jiangchuanli(大山)回复于 2005-02-01 15:08:08 得分 60
在存储过程中DBA的权限是不起作用的,
要单独赋权限的,
在B用户中:grant select on t_user_info to A;
还有commit最好放到循环外,当然视你的需求而定的。Top
4 楼jiangchuanli(大山)回复于 2005-02-01 15:21:14 得分 20
如表很多,需要赋这种权限的话,有一种简便的方法:
在sqlplus下执行:
-----------------------------
set heading off
set feedback off
spool c:\grant.sql
select 'grant select,delete,update,insert on ' || table_name || ';' from cat
where table_type = 'TABLE';
spool off
----------------------------
然后打开 c:\grant.sql ,再运行此脚本(在sqlplus中输入:@c:\grant.sql即可 )
Top
5 楼jiangchuanli(大山)回复于 2005-02-01 16:52:06 得分 0
不好意思,补充一下
select 'grant select,delete,update,insert on ' || table_name || ' to A;' from cat
where table_type = 'TABLE';
Top




