You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中REF数据类型列的数据长度计算确认及疑问

REF类型列数据长度计算验证

示例代码与查询结果

create or replace type object_test_0 as object
(item1_ varchar2(100),
 item2_ varchar2(10),
 item3_ varchar2(10))
/

create or replace type object_test_01
as object( item1_ number)
/

create table t_0_0
(
  item200_  number,
  item100_  ref object_test_0,
  item300_  object_test_01
)

create table t_0 of co.object_test_0 


insert into t_0_0 (select 1000,ref(t_t),object_test_01(10000) from t_0 t_t)

select * from all_tab_columns where table_name like 'T_0_0'

查询结果:

COLUMN_NAMEDATA_TYPEDATA_TYPE_MODDATA_LENGTH
ITEM200_NUMBER22
ITEM100_OBJECT_TEST_0REF50
ITEM300_OBJECT_TEST_011

问题验证

已知object_id为16字节,rowid为9字节,且存储引用时系统生成的对象标识符需重新映射,计算逻辑(16字节+9字节)*2=50字节是否正确?

解答

你的计算逻辑是正确的。Oracle中REF类型的存储结构包含两部分核心内容:16字节的对象标识符(OID)和9字节的ROWID,合计25字节。由于系统需要支持对象标识符的重新映射(应对数据库迁移、表空间移动等场景下的标识符转换需求),这两部分内容会被存储双份,因此总长度为(16+9)*2=50字节,与查询到的DATA_LENGTH=50完全匹配。


内容的提问来源于stack exchange,提问作者titi zarif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 00:33:18