create
or
replace
package
sys.dbms_rowid
is
------------
-- OVERVIEW
--
-- This package provides procedures to create ROWIDs and to interpret
-- their contents
-- SECURITY
--
-- The execution privilege is granted to PUBLIC. Procedures in this
-- package run under the caller security.
----------------------------
----------------------------
-- ROWID TYPES:
--
-- RESTRICTED - Restricted ROWID
--
-- EXTENDED - Extended ROWID
--
rowid_type_restricted
constant
integer
:=
0
;
rowid_type_extended
constant
integer
:=
1
;
-- ROWID VERIFICATION RESULTS:
--
-- VALID - Valid ROWID
--
-- INVALID - Invalid ROWID
--
rowid_is_valid
constant
integer
:=
0
;
rowid_is_invalid
constant
integer
:=
1
;
-- OBJECT TYPES:
--
-- UNDEFINED - Object Number not defined (for restricted ROWIDs)
--
rowid_object_undefined
constant
integer
:=
0
;
-- ROWID CONVERSION TYPES:
--
-- INTERNAL - convert to/from column of ROWID type
--
-- EXTERNAL - convert to/from string format
--
rowid_convert_internal
constant
integer
:=
0
;
rowid_convert_external
constant
integer
:=
1
;
-- EXCEPTIONS:
--
-- ROWID_INVALID - invalid rowid format
--
-- ROWID_BAD_BLOCK - block is beyond end of file
--
ROWID_INVALID
exception
;
pragma
exception_init
(ROWID_INVALID, -
1410
);
ROWID_BAD_BLOCK
exception
;
pragma
exception_init
(ROWID_BAD_BLOCK, -
28516
);
-- PROCEDURES AND FUNCTIONS:
--
--
-- ROWID_CREATE constructs a ROWID from its constituents:
--这个过程可以用来创建rowid进行比对,但只有oracle自己的rowid才是有效的
-- rowid_type - type (restricted/extended)
-- restricted为0;extended为1
-- object_number - data object number (rowid_object_undefined for restricted)
-- relative_fno - relative file number
--这是file号
-- block_number - block number in this file
-- file_number - file number in this block
--
function
rowid_create(rowid_type
IN
number
,
object_number
IN
number
,
relative_fno
IN
number
,
block_number
IN
number
,
row_number
IN
number
)
return
rowid
;
pragma
RESTRICT_REFERENCES
(rowid_create,
WNDS
,
RNDS
,
WNPS
,
RNPS
);
--
-- ROWID_INFO breaks ROWID into its components and returns them:
--这个过程几乎就是ROWID_CREATE的逆过程,返回所有属性
-- rowid_in - ROWID to be interpreted
-- rowid_type - type (restricted/extended)
-- object_number - data object number (rowid_object_undefined for restricted)
-- relative_fno - relative file number
-- block_number - block number in this file
-- file_number - file number in this block
-- ts_type_in - type of tablespace which this row belongs to
-- 'BIGFILE' indicates Bigfile Tablespace
-- 'SMALLFILE' indicates Smallfile (traditional pre-10i) TS.
-- NOTE: These two are the only allowed values for this param
--
procedure
rowid_info( rowid_in
IN
rowid
,
rowid_type
OUT
number
,
object_number
OUT
number
,
relative_fno
OUT
number
,
block_number
OUT
number
,
row_number
OUT
number
,
ts_type_in
IN
varchar2
default
'SMALLFILE'
);
pragma
RESTRICT_REFERENCES
(rowid_info,
WNDS
,
RNDS
,
WNPS
,
RNPS
);
--
-- ROWID_TYPE returns the type of a ROWID (restricted/extended_nopart,..)
--restricted则返回0;extended则返回1
-- row_id - ROWID to be interpreted
--
function
rowid_type(row_id
IN
rowid
)
return
number
;
pragma
RESTRICT_REFERENCES
(rowid_type,
WNDS
,
RNDS
,
WNPS
,
RNPS
);
--
-- ROWID_OBJECT extracts the data object number from a ROWID.
-- ROWID_OBJECT_UNDEFINED is returned for restricted rowids.
--
-- row_id - ROWID to be interpreted
--
function
rowid_object(row_id
IN
rowid
)
return
number
;
pragma
RESTRICT_REFERENCES
(rowid_object,
WNDS
,
RNDS
,
WNPS
,
RNPS
);
--
-- ROWID_RELATIVE_FNO extracts the relative file number from a ROWID.
--返回对应的datafile号,这个还是还是有点用处的,因为同一张表不一定属于同一datafile
-- row_id - ROWID to be interpreted
-- ts_type_in - type of tablespace which this row belongs to
--
function
rowid_relative_fno(row_id
IN
rowid
,
ts_type_in
IN
varchar2
default
'SMALLFILE'
)
return
number
;
pragma
RESTRICT_REFERENCES
(rowid_relative_fno,
WNDS
,
RNDS
,
WNPS
,
RNPS
);
--
-- ROWID_BLOCK_NUMBER extracts the block number from a ROWID.
--
-- row_id - ROWID to be interpreted
-- ts_type_in - type of tablespace which this row belongs to
-- ts_type_in只有2种选择,'SMALLFILE'和'BIGFILE'
--
function
rowid_block_number(row_id
IN
rowid
,
ts_type_in
IN
varchar2
default
'SMALLFILE'
)
return
number
;
pragma
RESTRICT_REFERENCES
(rowid_block_number,
WNDS
,
RNDS
,
WNPS
,
RNPS
);
--
-- ROWID_ROW_NUMBER extracts the row number from a ROWID.
--这个函数返回该条记录在block中的相对位置,大小不一定的,也不一定连续(如果删除过数据)
-- row_id - ROWID to be interpreted
--
function
rowid_row_number(row_id
IN
rowid
)
return
number
;
pragma
RESTRICT_REFERENCES
(rowid_row_number,
WNDS
,
RNDS
,
WNPS
,
RNPS
);
--
-- ROWID_TO_ABSOLUTE_FNO extracts the relative file number from a ROWID,
-- which addresses a row in a given table
--用于标注准确文件号,多用于分区表
-- row_id - ROWID to be interpreted
--
-- schema_name - name of the schema which contains the table
--
-- object_name - table name
--
function
rowid_to_absolute_fno(row_id
IN
rowid
,
schema_name
IN
varchar2
,
object_name
IN
varchar2
)
return
number
;
pragma
RESTRICT_REFERENCES
(rowid_to_absolute_fno,
WNDS
,
WNPS
,
RNPS
);
--
-- ROWID_TO_EXTENDED translates the restricted ROWID which addresses
-- a row in a given table to the extended format. Later, it may be removed
-- from this package into a different place
--
-- old_rowid - ROWID to be converted
--
-- schema_name - name of the schema which contains the table (OPTIONAL)
--
-- object_name - table name (OPTIONAL)
--
-- conversion_type - rowid_convert_internal/external_convert_external
-- (whether old_rowid was stored in a column of ROWID
-- type, or the character string)
--rowid_convert_internal (:=0)
--rowid_convert_external (:=1)
function
rowid_to_extended(old_rowid
IN
rowid
,
schema_name
IN
varchar2
,
object_name
IN
varchar2
,
conversion_type
IN
integer
)
return
rowid
;
pragma
RESTRICT_REFERENCES
(rowid_to_extended,
WNDS
,
WNPS
,
RNPS
);
--
-- ROWID_TO_RESTRICTED translates the extnded ROWID into a restricted format
--
-- old_rowid - ROWID to be converted
--
-- conversion_type - internal/external (IN)
--
-- conversion_type - rowid_convert_internal/external_convert_external
-- (whether returned rowid will be stored in a column of
-- ROWID type, or the character string)
--
function
rowid_to_restricted(old_rowid
IN
rowid
,
conversion_type
IN
integer
)
return
rowid
;
pragma
RESTRICT_REFERENCES
(rowid_to_restricted,
WNDS
,
RNDS
,
WNPS
,
RNPS
);
--
-- ROWID_VERIFY verifies the ROWID. It returns rowid_valid or rowid_invalid
-- value depending on whether a given ROWID is valid or not.
--这个函数是用于检验是否可以讲rowid从restricted改为extended的
--可以修改则返回0;不可以则返回1
-- rowid_in - ROWID to be verified
--
-- schema_name - name of the schema which contains the table
--
-- object_name - table name
--
-- conversion_type - rowid_convert_internal/external_convert_external
-- (whether old_rowid was stored in a column of ROWID
-- type, or the character string)
--
function
rowid_verify(rowid_in
IN
rowid
,
schema_name
IN
varchar2
,
object_name
IN
varchar2
,
conversion_type
IN
integer
)
return
number
;
pragma
RESTRICT_REFERENCES
(rowid_verify,
WNDS
,
WNPS
,
RNPS
);
end
;
***************************************************************************************
总结一下:
1、ROWID_CREATE:输入相应信息后自己创建一个ROWID并返回,主要用于测试比对
2、ROWID_INFO:返回ROWID确定的各种信息
3、ROWID_TYPE:返回ROWID类型(restricted or extended)
4、ROWID_OBJECT:返回该ROWID对应的OBJECT的OBJ#
5、ROWID_RELATIVE_FNO:返回该ROWID对应的对应文件号
6、ROWID_BLOCK_NUMBER:返回该ROWID所在的BLOCK号
7、ROWID_ROW_NUMBER:返回该行数据在BLOCK中的相对位置
8、ROWID_TO_ABSOLUTE_FNO:返回相关的完全数据文件号
9、ROWID_TO_EXTENDED:将restricted类型的ROWID修改为extended
10、ROWID_TO_RESTRICTED:将extended类型的ROWID修改为restricted
11、ROWID_VERIFY:查看是否可以对ROWID的类型进行修改
这个包的应用也比较简单,没什么可说的了,再转个eygle的文章,也是比较简单的应用的:
-----------------------
http://www.eygle.com/archives/2004/12/dbms_rowid_get_rowid_detail.html