暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

解密dbms_rowid -for 10g

原创 Roger 2011-08-15
497

PACKAGE BODY dbms_rowid IS
PROCEDURE ROWIDBUILD(ROW_ID OUT ROWID,
TYPE IN NUMBER,
OBJNUM IN NUMBER,
FILENUM IN NUMBER,
BLOCKNUM IN NUMBER,
ROWNUM IN NUMBER);
PRAGMA INTERFACE(C, ROWIDBUILD);
PROCEDURE ROWIDINFO(ROW_ID IN ROWID,
TYPE OUT NUMBER,
OBJNUM OUT NUMBER,
FILENUM OUT NUMBER,
BLOCKNUM OUT NUMBER,
ROWNUM OUT NUMBER,
TS_TYPE_IN IN VARCHAR2 DEFAULT 'SMALLFILE');
PRAGMA INTERFACE(C, ROWIDINFO);

PROCEDURE ROWIDAFN(ROW_ID IN ROWID,
SCHEMA_NAME IN VARCHAR2,
OBJECT_NAME IN VARCHAR2,
ABSOLUTE_FNO OUT NUMBER);
PRAGMA INTERFACE(C, ROWIDAFN);

PROCEDURE ROWIDCNVTE(NEW_ROWID OUT ROWID,
OLD_ROWID IN ROWID,
SCHEMA_NAME IN VARCHAR2,
OBJECT_NAME IN VARCHAR2,
CONVERSION_TYPE IN INTEGER);
PRAGMA INTERFACE(C, ROWIDCNVTE);

PROCEDURE ROWIDCNVTR(NEW_ROWID OUT ROWID,
OLD_ROWID IN ROWID,
CONVERSION_TYPE IN INTEGER);
PRAGMA INTERFACE(C, ROWIDCNVTR);

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 IS
ROW_ID ROWID;
BEGIN

ROWIDBUILD(ROW_ID,
ROWID_TYPE,
OBJECT_NUMBER,
RELATIVE_FNO,
BLOCK_NUMBER,
ROW_NUMBER);

RETURN(ROW_ID);
END;

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') IS
BEGIN

ROWIDINFO(ROWID_IN,
ROWID_TYPE,
OBJECT_NUMBER,
RELATIVE_FNO,
BLOCK_NUMBER,
ROW_NUMBER,
TS_TYPE_IN);
END;

FUNCTION ROWID_TYPE(ROW_ID IN ROWID) RETURN NUMBER IS
ROWID_TYPE NUMBER;
OBJECT_NUMBER NUMBER;
RELATIVE_FNO NUMBER;
BLOCK_NUMBER NUMBER;
ROW_NUMBER NUMBER;
BEGIN

ROWIDINFO(ROW_ID,
ROWID_TYPE,
OBJECT_NUMBER,
RELATIVE_FNO,
BLOCK_NUMBER,
ROW_NUMBER);

RETURN(ROWID_TYPE);
END;

FUNCTION ROWID_OBJECT(ROW_ID IN ROWID) RETURN NUMBER IS
ROWID_TYPE NUMBER;
OBJECT_NUMBER NUMBER;
RELATIVE_FNO NUMBER;
BLOCK_NUMBER NUMBER;
ROW_NUMBER NUMBER;
BEGIN

ROWIDINFO(ROW_ID,
ROWID_TYPE,
OBJECT_NUMBER,
RELATIVE_FNO,
BLOCK_NUMBER,
ROW_NUMBER);

RETURN(OBJECT_NUMBER);
END;

FUNCTION ROWID_RELATIVE_FNO(ROW_ID IN ROWID,
TS_TYPE_IN IN VARCHAR2 DEFAULT 'SMALLFILE')
RETURN NUMBER IS
ROWID_TYPE NUMBER;
OBJECT_NUMBER NUMBER;
RELATIVE_FNO NUMBER;
BLOCK_NUMBER NUMBER;
ROW_NUMBER NUMBER;
BEGIN

ROWIDINFO(ROW_ID,
ROWID_TYPE,
OBJECT_NUMBER,
RELATIVE_FNO,
BLOCK_NUMBER,
ROW_NUMBER,
TS_TYPE_IN);

RETURN(RELATIVE_FNO);
END;

FUNCTION ROWID_BLOCK_NUMBER(ROW_ID IN ROWID,
TS_TYPE_IN IN VARCHAR2 DEFAULT 'SMALLFILE')
RETURN NUMBER IS
ROWID_TYPE NUMBER;
OBJECT_NUMBER NUMBER;
RELATIVE_FNO NUMBER;
BLOCK_NUMBER NUMBER;
ROW_NUMBER NUMBER;
BEGIN

ROWIDINFO(ROW_ID,
ROWID_TYPE,
OBJECT_NUMBER,
RELATIVE_FNO,
BLOCK_NUMBER,
ROW_NUMBER,
TS_TYPE_IN);

RETURN(BLOCK_NUMBER);
END;

FUNCTION ROWID_ROW_NUMBER(ROW_ID IN ROWID) RETURN NUMBER IS
ROWID_TYPE NUMBER;
OBJECT_NUMBER NUMBER;
RELATIVE_FNO NUMBER;
BLOCK_NUMBER NUMBER;
ROW_NUMBER NUMBER;
BEGIN

ROWIDINFO(ROW_ID,
ROWID_TYPE,
OBJECT_NUMBER,
RELATIVE_FNO,
BLOCK_NUMBER,
ROW_NUMBER);

RETURN(ROW_NUMBER);
END;

FUNCTION ROWID_TO_ABSOLUTE_FNO(ROW_ID IN ROWID,
SCHEMA_NAME IN VARCHAR2,
OBJECT_NAME IN VARCHAR2) RETURN NUMBER IS
ABSOLUTE_FNO NUMBER;
BEGIN

ROWIDAFN(ROW_ID, SCHEMA_NAME, OBJECT_NAME, ABSOLUTE_FNO);

RETURN(ABSOLUTE_FNO);
END;

FUNCTION ROWID_TO_EXTENDED(OLD_ROWID IN ROWID,
SCHEMA_NAME IN VARCHAR2,
OBJECT_NAME IN VARCHAR2,
CONVERSION_TYPE IN INTEGER) RETURN ROWID IS
NEW_ROWID ROWID;
BEGIN

ROWIDCNVTE(NEW_ROWID,
OLD_ROWID,
SCHEMA_NAME,
OBJECT_NAME,
CONVERSION_TYPE);

RETURN(NEW_ROWID);
END;

FUNCTION ROWID_TO_RESTRICTED(OLD_ROWID IN ROWID,
CONVERSION_TYPE IN INTEGER) RETURN ROWID IS
NEW_ROWID ROWID;
BEGIN

ROWIDCNVTR(NEW_ROWID, OLD_ROWID, CONVERSION_TYPE);

RETURN(NEW_ROWID);
END;

FUNCTION ROWID_VERIFY(ROWID_IN IN ROWID,
SCHEMA_NAME IN VARCHAR2,
OBJECT_NAME IN VARCHAR2,
CONVERSION_TYPE IN INTEGER) RETURN NUMBER IS
NEW_ROWID ROWID;
BEGIN

ROWIDCNVTE(NEW_ROWID,
ROWID_IN,
SCHEMA_NAME,
OBJECT_NAME,
CONVERSION_TYPE);
RETURN(0);
EXCEPTION
WHEN ROWID_INVALID OR ROWID_BAD_BLOCK THEN
RETURN(1);
END;

END;


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论