PL/SQL代码存储在哪里?

[复制链接]
查看11 | 回复5 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
PL/SQL代码的对象,比如Function、Procedure、Package等,都是存储在哪里的呢?
我如何得知这些代码占用了多少存储空间?
应该也是在某个Segment中吧? 但是我查了DBA_SEGMENTS视图,确找不到这种类型的segment.
请各位指教,谢谢。


回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
这个问题已出现多次,相信搜索一下论坛都能找到答案了
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 rake 发布
[B]PL/SQL代码的对象,比如Function、Procedure、Package等,都是存储在哪里的呢?
我如何得知这些代码占用了多少存储空间?
应该也是在某个Segment中吧? 但是我查了DBA_SEGMENTS视图,确找不到这种类型的segment.
请各位指教,谢谢。

[/B]

sys.source$
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
dba_sources
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
谢谢楼上各位的帮助。这下我知道了。
PL/SQL代码的确就是以表的形式存储的,表名是SYS.SOURCE$,对应的SEGMENT在system表空间。
通过计算SOURCE$ segment的大小,应该就可以得到PL/SQL代码所占用的存储空间。不过SOURCE$表除了保存代码的字段外,还有OBJECT ID和LINE number 两个字段,所以,实际的PL/SQL代码的存储空间,应该比SOURCE$ segment稍微小一些。
而DBA_SOURCE只是视图。
SELECT * FROM DBA_SEGMENTS S WHERE S.SEGMENT_NAME = 'SOURCE$';
OWNER
SYS
SEGMENT_NAME
SOURCE$
PARTITION_NAME

SEGMENT_TYPE
TABLE
TABLESPACE_NAME
SYSTEM
HEADER_FILE
1
HEADER_BLOCK
529
BYTES
109051904
BLOCKS
13312
EXTENTS
84
INITIAL_EXTENT
16384
NEXT_EXTENT

MIN_EXTENTS
1
MAX_EXTENTS
2147483645
PCT_INCREASE

FREELISTS
1
FREELIST_GROUPS
1
RELATIVE_FNO
1
BUFFER_POOL
DEFAULT

SQL> desc SYS.SOURCE$;
Name Type Nullable Default Comments
------ -------------- -------- ------- --------
OBJ# NUMBER

LINE NUMBER

SOURCE VARCHAR2(4000) Y
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
学习!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行