zoukankan      html  css  js  c++  java
  • Oracle 10g dbms_rowid 包源码


    前几天Roger 的blog 更新了一篇文章,是DBMS_ROWID包的定义部分,Oracle 的包的都是用wrap 进行加密的。itpub上有人研究了unwrap,也公布了一些代码,可以实现unwrap。


    关于wrap和unwrap,参考我的blog:
    Oracle wrap 和 unwrap( 加密与解密) 说明
    http://blog.csdn.net/tianlesoftware/article/details/6698535


    rowid在DB 维护中用的也是比较多。 了解ROWID 的相关函数,有助于工作。 
    Oracle Rowid 介绍
    http://blog.csdn.net/tianlesoftware/article/details/5020718

    Roger贴的那部分没有只有代码,没有注释,所以这里用Toad 把注释部分也拉出来了。贴一下。也可以直接用SQL 查看:
    SQL>select text from dba_source where name='DBMS_ROWID'; 

    /* Formatted on2011/8/18 11:26:49 (QP5 v5.163.1008.3004) */

    CREATE OR REPLACE PACKAGE SYS.DBMS_ROWID

    IS

       ------------

       --  OVERVIEW

       --

       --  This package provides procedures to createROWIDs 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 (forrestricted ROWIDs)

       --

       rowid_object_undefined   CONSTANT INTEGER := 0;

     

       --  ROWID CONVERSION TYPES:

       --

       --   INTERNAL - convert to/from column of ROWIDtype

       --

       --   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_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

       --

       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_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 BigfileTablespace

       --              'SMALLFILE' indicates Smallfile(traditional pre-10i) TS.

       --              NOTE: These two are the onlyallowed 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,..)

       --

       --row_id - ROWID to be interpreted

       --

       FUNCTION rowid_type (row_idIN 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_idIN ROWID)

          RETURN NUMBER;

     

       PRAGMA RESTRICT_REFERENCES (rowid_object, WNDS, RNDS, WNPS, RNPS);

     

       --

       --ROWID_RELATIVE_FNO extracts the relative file number from a ROWID.

       --

       --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

       --

       --

       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.

       --

       --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

       -- arow 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 wasstored in a column of ROWID

       --                    type, or the characterstring)

       --

       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

       --                   (whetherreturned rowid will be stored in a column of

       --                    ROWID type, or thecharacter 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_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 wasstored in a column of ROWID

       --                    type, or the characterstring)

       --

       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;

    /

    -------------------------------------------------------------------------------------------------------

    Blog: http://blog.csdn.net/tianlesoftware

    Weibo: http://weibo.com/tianlesoftware

    Email: dvd.dba@gmail.com

    DBA1 群:62697716(满);   DBA2 群:62697977(满)  DBA3 群:62697850(满)  

    DBA 超级群:63306533(满);  DBA4 群: 83829929(满) DBA5群: 142216823(满) 

    DBA6 群:158654907(满)  聊天 群:40132017(满)   聊天2群:69087192(满)

    --加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

  • 相关阅读:
    手动在本机仓库中放置jar包以解决Maven中央仓库不存在该资源的问题
    同一套代码部署到两台机器上,只有一台机器上的页面中文乱码
    Nginx与httpd共存
    [Z3001] connection to database 'zabbix' failed: [2003] Can't connect to MySQL server on 'x.x.x.x' (13)
    Excel中时间戳转换公式及原理
    springcloud服务注册和发现
    spingboot和springcloud简记
    postgres use
    访问者模式
    uml类图详解
  • 原文地址:https://www.cnblogs.com/tianlesoftware/p/3609599.html
Copyright © 2011-2022 走看看