在我搜索时,Oracle有一个单独的ROWID类别,而在tutorialspoint中它将其归类为字符子类型。正如在Oracle Data Type页面中看到的那样,ROWID确实用字符表示。但为什么它像字符类型一样存储而不像数字类型(特别是整数)? ROWID是否也作为字符存储在物理层中?
答案 0 :(得分:1)
我建议教学点过分简化。 在您使用它时,看起来就像一个字符类型。
它不像字符类型那样存储。事实上,要对它进行字符操作(例如CONCAT),您必须将其强制转换为字符类型。至于为什么表示作为一个字符类型,它可能只是一个很好的折衷,可以在/查询/粘贴/输入SQL查询工具中显示,但可以更多地存储信息密集而不是一个简单的数字。如果它只是数字,它可能会很长,因为它是一个80位的数字......
换句话说,A number encoded in base 64 using letters and numbers,就像ROWID实际上的那样,对于一个人而言,处理这个问题要比原始的10字节数字少得多。
答案 1 :(得分:1)
它作为字节存储,与其他所有内容一样。
例如,'AAAACOAABAAAAR5AAA'
存储为00 00 00 8e 00 40 04 79 00 00
。但仅在您创建和填充用户列的情况下。使用
ROWID
SELECT ROWID FROM some_table
不会存储在任何地方,它的格式为行的物理地址:
对象ID,文件号(对于小文件表空间),块号,块偏移
ROWID元素以Base64编码形式显示。