#DBMS_ROWID

DBMS_ROWID包提供了一组内置的函数,用于获取ROWID的数据块号blockId、相对文件号fileId和行号dir信息。

# ROWID_BLOCK_NUMBER

DBMS_ROWID.ROWID_BLOCK_NUMBER (
   row_id      IN  ROWID,
   ts_type_in  IN  VARCHAR DEFAULT 'SMALLFILE')
RETURN NUMBER;

ROWID_BLOCK_NUMBER函数用于获取指定ROWID所对应的数据块号blockId,返回值为NUMBER类型。

参数 描述
row_id 待解释的ROWID。该参数的数据类型可为ROWID/UROWID/RAW/CHAR/VARCHAR/NCHAR/NVARCHAR类型。
ts_type_in 保留字段,使用缺省值,默认值为'SMALLFILE',不区分大小写,且仅接受SMALLFILE、BIGFILE。该参数的数据类型可以为VARCHAR类型和可以隐式转换为VARCHAR类型的其他数据类型,详情参阅数据类型转换

示例

CREATE TABLE tbl_rowid(ID INT);
INSERT INTO tbl_rowid VALUES(1);
INSERT INTO tbl_rowid VALUES(2);

SELECT ROWID, DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
FROM tbl_rowid
WHERE ID = 2;
--result
ROWID                                        DBMS_ROWID.ROWID_BLO 
-------------------------------------------- -------------------- 
2801:0:0:3572:1                                              3572

# ROWID_RELATIVE_FNO

DBMS_ROWID.ROWID_RELATIVE_FNO (
   row_id      IN  ROWID,
   ts_type_in  IN  VARCHAR DEFAULT 'SMALLFILE')
RETURN NUMBER;

ROWID_RELATIVE_FNO函数用于获取指定ROWID所对应的相对文件号fileId,返回值为NUMBER类型。

参数 描述
row_id 待解释的ROWID。该参数的数据类型可为ROWID/UROWID/RAW/CHAR/VARCHAR/NCHAR/NVARCHAR类型。
ts_type_in 保留字段,使用缺省值,默认值为'SMALLFILE',不区分大小写,且仅接受SMALLFILE、BIGFILE。该参数的数据类型可以为VARCHAR类型和可以隐式转换为VARCHAR类型的其他数据类型,详情参阅数据类型转换

示例

SELECT ROWID, DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID)
FROM tbl_rowid
WHERE ID = 2;
--result
ROWID                                        DBMS_ROWID.ROWID_REL 
-------------------------------------------- -------------------- 
2801:0:0:3572:1                                                 0

# ROWID_ROW_NUMBER

DBMS_ROWID.ROWID_ROW_NUMBER (
   row_id      IN  ROWID)
RETURN NUMBER;

ROWID_ROW_NUMBER函数用于获取指定ROWID所对应的行号dir,返回值为NUMBER类型。

参数 描述
row_id 待解释的ROWID。该参数的数据类型可为ROWID/UROWID/RAW/CHAR/VARCHAR/NCHAR/NVARCHAR类型。

示例

SELECT ROWID, DBMS_ROWID.ROWID_ROW_NUMBER(ROWID)
FROM tbl_rowid
WHERE ID = 2;
--result
ROWID                                        DBMS_ROWID.ROWID_ROW 
-------------------------------------------- -------------------- 
2801:0:0:3572:1                                                 1

# 异常说明

异常 描述
ROWID_INVALID 无效的rowid

示例

--rowid_invalid exception
DECLARE
  BLK NUMBER;
  RID VARCHAR(100) := 'aaa';
BEGIN
  BLK := DBMS_ROWID.ROWID_BLOCK_NUMBER(RID);
EXCEPTION
  WHEN DBMS_ROWID.ROWID_INVALID THEN
    DBMS_OUTPUT.PUT_LINE('invalid rowid: ' || RID);
END;
/
--result
invalid rowid: aaa