天怒人怨的问题,请看看,急等(分不够再加)

lovestl 2005-08-05 06:07:31
因为在不同的用户名有相同的表,所以希望能够有一个存储就可以处理所有的用户。所以将这个表明作为参数传递进来,如下所示
create or replace function fun_test(
table_name varchar2)
return number is
TYPE cur_typ IS REF CURSOR;
c cur_typ;
v_count number;
v_user_no varchar2(20);
v_str varchar2(200);
begin
v_str := 'SELECT user_no from ' ||table_name||' where rownum <= 10';
OPEN c FOR v_str;
loop
fetch c into v_user_no;
exit when c%NOTFOUND;
dbms_output.put_line(v_user_no);
end loop;
close c;
return 1;
end;

执行时如果是本用户下的表来测试
declare
result number;
begin
result := fun_test('tb_callrecord');
end;
执行没问题,一切正常。但是不是本用户下的表如

declare
result number;
begin
result := fun_test('dbaguangzhou.tb_callrecord');
end;
就会报ORA-00942:table or view not exist.
而实际上将表是存在的,将SQL语句单独执行也是没问题的。求高手作答谢谢,
...全文
124 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
UandM 2005-08-06
  • 打赏
  • 举报
回复
最好是在建立这个用户的时候授权给他。
bzszp 2005-08-06
  • 打赏
  • 举报
回复
使用动态sql语句
execute immediate 'grant select on '||v_tbname||' to username';
ssDOn 2005-08-06
  • 打赏
  • 举报
回复
建个role,
然后运行时才进行所需用户grant ......
程序结束后收回。
yslcuk 2005-08-05
  • 打赏
  • 举报
回复
grant table to 用户
lovestl 2005-08-05
  • 打赏
  • 举报
回复
怎么在存储过程中授权啊
UandM 2005-08-05
  • 打赏
  • 举报
回复
你应该给这些用户授权阿

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧