|

我们来分析一下关于 oracle进制转换rowid转36进制字符串代码: FUNCTION FUN_ROWID_TO_36HEX(p_ID in VARCHAR2) return varchar2 is
V_OBJECT_ID INTEGER;
V_O_S VARCHAR2(7);
V_FILE_ID INTEGER;
V_F_S VARCHAR2(4);
V_BLOCK_ID INTEGER;
V_B_S VARCHAR2(6);
V_ROW_NO INTEGER;
V_R_S VARCHAR(4);
V_TIME INTEGER;
V_T_S VARCHAR(9);
v_r varchar(32);
BEGIN
select dbms_rowid.rowid_object(p_ID) object_id,
dbms_rowid.rowid_relative_fno(p_ID) file_id,
dbms_rowid.rowid_block_number(p_ID) block_id,
dbms_rowid.rowid_row_number(p_ID) num
INTO V_OBJECT_ID, V_FILE_ID, V_BLOCK_ID, V_ROW_NO
from DUAL;
select (sysdate - to_date('1970-01-01', 'yyyy-mm-dd')) * 86400000
into V_TIME
from dual;
V_O_S := FUN_INT_TO_36HEX(V_OBJECT_ID);
V_F_S := FUN_INT_TO_36HEX(V_FILE_ID);
V_B_S := FUN_INT_TO_36HEX(V_BLOCK_ID);
V_R_S := FUN_INT_TO_36HEX(V_ROW_NO);
V_T_S := FUN_INT_TO_36HEX(V_TIME);
V_O_S := lpad(V_O_S, 7, '0');
V_F_S := lpad(V_F_S, 4, '0');
V_B_S := lpad(V_B_S, 6, '0');
V_R_S := lpad(V_R_S, 4, '0');
V_T_S := lpad(V_T_S, 9, '0');
v_r := V_T_S || V_O_S || V_F_S || V_B_S || V_R_S;
v_r := lpad(v_r, 32, '0');
|
|