`

Package DBMS_ROWID

 
阅读更多

 

 

DBMS_ROWID包允许我们使用PL/SQL程序或SQL语句创建rowids和获取rowid的信息。例如可以通过其找到数据对象编号,数据文件编号,包含数据行的数据块编号及数据块中的数据行。该包从Oracle 8.X开始可用。

DBMS_ROWID的几个子函数程序:

1ROWID_BLOCK_NUMBER函数(该函数返回输入ROWID的数据块编号)

语法:
DBMS_ROWID.ROWID_BLOCK_NUMBER(
    row_id         IN ROWID,
    ts_type_in    IN VARCHAR2 DEFAULT 'SMAILLFILE')

返回值是number类型。

参数:
row_id
:被转换的rowid
ts_type_in
:数据行所在表空间类型,默认是SMALLFILE,即小数据文件表空间。

举例:
SQL> select dbms_rowid.rowid_block_number(rowid,'smallfile') block_id from emp where rownum <=3;
  BLOCK_ID
----------
        30
        30
        30

2ROWID_CREATE函数(返回一个基于单独行的rowid
语法:
DBMS_ROWID.ROWID_CREATE (
    rowid_type           IN NUMBER,
    object_number    IN NUMBER,
    relative_fno          IN NUMBER,
    block_number     IN NUMBER,
    row_number       IN NUMBER)

参数:
rowid_type
rowid类型(restricted或者extended)。设置rowid_type0时,代表restricted ROWID(此时,将忽略参数object_number):设置rowid_type1时,代表extended ROWID
object_number
:数据对象编号(仅restricted类型rowid可用)。
relative_fno
:所在数据文件编号。
block_number
:该数据文件中的数据块编号。
row_number
:在该块中的行编号。

举例:
创建restricted ROWID
SQL> select dbms_rowid.rowid_create(0,9999,12,1000,13) from dual;
DBMS_ROWID.ROWID_C
------------------
000003E8.000D.000C
创建extended ROWID
SQL> select dbms_rowid.rowid_create(1,9999,12,1000,13) from dual;
DBMS_ROWID.ROWID_C
------------------
AAACcPAAMAAAAPoAAN

3ROWID_INFO过程(该过程返回一个ROWID的相关信息,包括类型和ROWID的一些其他部分,注意:这时一个存储过程,不能在SQL语句中使用)
语法:
DBMS_ROWID.ROWID_INFO (
   rowid_in              IN   ROWID,    --
输入参数
   ts_type_in            IN   VARCHAR2 DEFAULT 'SMALLFILE',     --
输入参数
   rowid_type          OUT  NUMBER,           --out
代表输出参数
   object_number    OUT  NUMBER,
   relative_fno         OUT  NUMBER,
   block_number     OUT  NUMBER,
   row_number        OUT  NUMBER);

参数:
rowid_in
ROWID to be interpreted. This determines if the ROWID is a restricted (0) or extended (1) ROWID.
ts_type_in
The type of the tablespace (bigfile/smallfile) to which the row belongs.
rowid_type
Returns type (restricted/extended).
object_number
Returns data object number (rowid_object_undefined for restricted).
relative_fno
Returns relative file number.
block_number
Returns block number in this file.
row_number
Returns row number in this block.

举例:
SQL> set serverout on
SQL> declare         
  2  my_rowid rowid;         
  3  rowid_type number;         
  4  object_number number;         
  5  relative_fno number;         
  6  block_number number;         
  7  row_number number;         
  8  begin         
  9  my_rowid :=dbms_rowid.rowid_create(1, 6877,1,23722,0);   
 10  dbms_rowid.rowid_info(my_rowid, rowid_type, object_number,
 11  relative_fno, block_number, row_number);         
 12  dbms_output.put_line('ROWID:   ' || my_rowid);         
 13  dbms_output.put_line('Object#:      ' || object_number); 
 14  dbms_output.put_line('RelFile#:     ' || relative_fno);  
 15  dbms_output.put_line('Block#:       ' || block_number);  
 16  dbms_output.put_line('Row#:         ' || row_number);    
 17  end;         
 18  / 
ROWID:   AAABrdAABAAAFyqAAA
Object#:      6877
RelFile#:     1
Block#:       23722
Row#:         0
PL/SQL procedure successfully completed.

4ROWID_OBJECT函数(该函数返回扩展ROWID的数据对象编号,如果输入的ROWID类型为restricted,则该函数返回值为0

语法:
DBMS_ROWID.ROWID_OBJECT (rowid_id IN ROWID)

举例:
SQL> select dbms_rowid.rowid_object(ROWID) from T1;     
DBMS_ROWID.ROWID_OBJECT(ROWID)
------------------------------
                         12949
                         12949

5ROWID_RELATIVE_FNO函数(该函数根据输入的ROWID值,返回其所在数据文件编号)

语法:
DBMS_ROWID.ROWID_RELATIVE_FNO (
   rowid_id      IN   ROWID,
   ts_type_in    IN   VARCHAR2 DEFAULT 'SMALLFILE')  
  RETURN NUMBER;

举例:
SQL> select dbms_rowid.rowid_relative_fno(ROWID) FILE# from T1;
     FILE#
----------
         6
         6

5ROWID_ROW_NUMBER函数(该函数根据输入的ROWID提取出行(row)号)

语法:
DBMS_ROWID.ROWID_ROW_NUMBER (row_id IN ROWID)
RETURN NUMBER;

举例:
SQL> select dbms_rowid.rowid_row_number(ROWID) ROW_NUM from T1;
   ROW_NUM
----------
         0
         1

6ROWID_TO_ABSOLUTE_FNO函数(从输入的ROWID中提取出其所在完全文件号)

语法:
DBMS_ROWID.ROWID_TO_ABSOLUTE_FNO (
   row_id      IN ROWID,
   schema_name IN VARCHAR2,
   object_name IN VARCHAR2)
  RETURN NUMBER;

举例:
SQL> select dbms_rowid.rowid_to_absolute_fno(rowid,'LIGLE','T1') FROM T1;
DBMS_ROWID.ROWID_TO_ABSOLUTE_FNO(ROWID,'LIGLE','T1')
----------------------------------------------------
                                                   6
                                                   6

7ROWID_TYPE函数(返回ROWID的类型,返回0代表restricted ROWID;返回1代表extended ROWID

语法:
DBMS_ROWID.ROWID_TYPE (
   rowid_id IN ROWID)
  RETURN NUMBER;

举例:
SQL> select dbms_rowid.rowid_type(rowid) from t1;
DBMS_ROWID.ROWID_TYPE(ROWID)
----------------------------
                           1
                           1

 还有几个函数,用时查下文档就可以了,都比较简单。

 

 

分享到:
评论

相关推荐

    DBMS_XMLDOM DBMS_XMLPARSER DBMS_XMLQUERY 文档

    Oracle数据库系统提供了强大的XML处理能力,这主要体现在其内置的几个PL/SQL包上,如DBMS_XMLDOM、DBMS_XMLPARSER和DBMS_XMLQUERY。这些包为开发者提供了处理XML文档的一整套工具,使得在数据库环境中进行XML数据的...

    使用dbms_stats包手工收集统计信息

    Oracle 数据库中使用 dbms_stats 包手动收集统计信息 在 Oracle 数据库中,dbms_stats 包提供了一种手动收集统计信息的方式,包括基于表、用户和索引的统计信息。通过使用 dbms_stats 包,我们可以手动收集统计信息...

    oracle dbms_lob

    Oracle数据库系统中,`DBMS_LOB`是一个重要的PL/SQL包,专门用于处理大型对象(LOBs,Large Object)。LOBs是Oracle提供的一种数据类型,用于存储大量数据,如文本、图像、音频或视频文件等。这个包包含了各种过程和...

    DBMS_STATS.GATHER_TABLE_STATS详解.pdf

    ### DBMS_STATS.GATHER_TABLE_STATS详解 #### 一、概述 `DBMS_STATS.GATHER_TABLE_STATS` 是 Oracle 数据库中的一个重要过程,主要用于收集表、列和索引的统计信息,这些统计信息对于优化器选择合适的执行计划至关...

    ORACLE SYS.DBMS_REGISTRY_SYS has errors

    标题中的问题“ORACLE SYS.DBMS_REGISTRY_SYS has errors”指的是在Oracle数据库系统中,系统包BODY `SYS.DBMS_REGISTRY_SYS` 出现错误,导致了一系列的PL/SQL调用失败。这种错误通常与数据库的元数据注册功能有关,...

    dbms_obfuscation_toolkit加密解密数据

    ### DBMS_OBFUSCATION_TOOLKIT:Oracle 数据库中的加密与解密工具包 DBMS_OBFUSCATION_TOOLKIT是Oracle数据库提供的一种用于数据加密解密的强大工具包,自Oracle 8i版本开始引入。它支持多种加密算法,如DES、...

    怎样禁用及回收java的授权dbms_java

    ### 如何禁用及回收Java的授权:dbms_java 授权管理详解 #### 一、引言 在Oracle数据库环境中,`dbms_java`包提供了一系列功能强大的工具,用于管理和控制Java应用程序的安全性。这对于那些在Oracle环境中部署了...

    DBMS_RANDOM.VALUE OR DBMS_RANDOM.STRING

    在Oracle数据库系统中,`DBMS_RANDOM`是一个非常实用的包,它提供了生成随机数和随机字符串的功能。这个包在各种场景下都有广泛的应用,比如在测试数据的生成、模拟随机行为或者创建伪随机数据时。我们将深入探讨`...

    DBMS_SQL的使用

    ### Oracle DBMS_SQL 使用详解 #### 一、概述 在Oracle数据库中,`DBMS_SQL`包是一个功能强大的工具,用于执行动态SQL语句。它提供了处理动态SQL语句的能力,使得开发人员能够灵活地构建和执行SQL语句,而不需要...

    PostgreSQL_DBMS_for_Windows_922_136133.exe

    支持ArcGIS10.2版本的PostgreSQL_DBMS_for_windows_922,ESRI官方原版资源。

    dbms_lock控制串行详解

    DBMS_LOCK是Oracle数据库系统中的一个内置包,用于在用户会话之间实现锁的管理,以确保并发操作的安全性和数据一致性。这篇博文深入探讨了DBMS_LOCK的功能、使用方法以及在实际应用中的重要性。 首先,我们要理解...

    DBMS_SQL.rar_dbms_oracle

    在Oracle数据库系统中,DBMS_SQL是一个非常重要的包,它提供了动态执行SQL语句的功能,这对于开发复杂的数据库应用或者需要在运行时构建SQL语句的情况非常有用。DBMS_SQL允许我们处理那些在编译时未知的SQL语句,极...

    DBMS_REDEFINITION

    DBMS_REDEFINITION.CAN_REDEF_TABLE 函数可以判断某个表能否进行在线重定义,参数包括 UNAME 表示用户名称、TNAME 表示表名称、OPTIONS_FLAG 表示重定义表的方式,默认为主键方式重定义方式,可以是主键方式或 ROWID...

    DBMS_c.rar_C语言实现DBMS_DBMS_c_c语言DBMS_dbms

    在这个项目中,"DBMS_c.rar" 提供了一个使用 C 语言实现的简单 DBMS 框架,名为 "DBMS_c",特别强调了用 C 语言来构建数据库系统的能力。C 语言以其高效和灵活性著称,这使得它成为编写底层系统软件的理想选择,尽管...

    DBMS.rar_dbms_dbms java_dbms_java_plus

    "DBMS.rar_dbms_dbms_java_dbms_java_plus"这个标题暗示了我们关注的焦点:使用Java实现对DBMS(特别是Oracle数据库)的操作,并且具有类似SQL*PLUS的功能。SQL*PLUS是Oracle公司提供的一个命令行工具,用于执行SQL...

    DBMS_JOB包创建ORACLE定时任务

    ### DBMS_JOB包创建Oracle定时任务详解 在Oracle数据库中,`DBMS_JOB`包提供了一种机制,用于创建和管理后台作业(Job),这些作业可以在特定的时间或按一定的时间间隔执行。这对于需要定期执行的任务非常有用,...

    ORACLE DBMS STATS ERROR

    然而,当出现错误“ORA-04063: package body 'SYS.DBMS_REGISTRY_SYS' has errors”时,表明`DBMS_STATS`包或与其相关的`SYS.DBMS_REGISTRY_SYS`包体存在错误,这可能对数据库性能和正常操作造成影响。 **问题症状*...

    Re-post: DBMS_XPLAN : Display Oracle Execution Plans

    1. `xplan.package.sql` - 这可能是一个创建或调整DBMS_XPLAN包的脚本,包含定义函数和过程的源代码,用户可以使用这些函数和过程来获取执行计划信息。 2. `xplan.display_awr.sql` - AWR(Automatic Workload ...

Global site tag (gtag.js) - Google Analytics