存储过程出错。

范佩西_11 2008-09-08 03:19:06
我写一个存储过程来打印,当前用户下所有的表占用的大小以G为单位的。编译的时候 from dba_segments这行出错,我在程序窗口中运行select * from dba_segments,正常的。请问是怎么回事?以下是代码
create or replace procedure pro_count is
cursor cu_tname is
select table_name from user_tables;
v_tname varchar2(50);
c number;
begin
open cu_tname;
loop
fetch cu_tname
into v_tname;
exit when cu_tname%notfound;
select bytes/1024/1024
into c
from dba_segments
where segment_name = v_tname;
dbms_output.put_line(c);
end loop;
close cu_tname;
end;
...全文
89 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaka730 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 oracledbalgtu 的回复:]
把dba_SEGMENTS,改成user_SEGMENTS试试。
因为多个用户下可能存在重名的对象,会导致错误。


引用楼主 linzhangs 的帖子:
我写一个存储过程来打印,当前用户下所有的表占用的大小以G为单位的。编译的时候 from dba_segments这行出错,我在程序窗口中运行select * from dba_segments,正常的。请问是怎么回事?以下是代码

SQL codecreate or replace procedure pro_count is
cursor cu_tname is
select ta…
[/Quote]
正解
hyrongg 2008-09-08
  • 打赏
  • 举报
回复
该没有DBA的权限
oracledbalgtu 2008-09-08
  • 打赏
  • 举报
回复
把dba_SEGMENTS,改成user_SEGMENTS试试。
因为多个用户下可能存在重名的对象,会导致错误。


[Quote=引用楼主 linzhangs 的帖子:]
我写一个存储过程来打印,当前用户下所有的表占用的大小以G为单位的。编译的时候 from dba_segments这行出错,我在程序窗口中运行select * from dba_segments,正常的。请问是怎么回事?以下是代码

SQL codecreate or replace procedure pro_count is
cursor cu_tname is
select table_name from user_tables;
v_tname varchar2(50);
c number;
begin
open cu_tname;
loop
fetch cu_tname

[/Quote]
sleepzzzzz 2008-09-08
  • 打赏
  • 举报
回复
权限?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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