为什么ROWID数据类型表示为字符子类型 - Oracle SQL

时间:2015-12-06 19:53:31

标签: sql oracle sqldatatypes rowid

在我搜索时,Oracle有一个单独的ROWID类别,而在tutorialspoint中它将其归类为字符子类型。正如在Oracle Data Type页面中看到的那样,ROWID确实用字符表示。但为什么它像字符类型一样存储而不像数字类型(特别是整数)? ROWID是否也作为字符存储在物理层中?

2 个答案:

答案 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编码形式显示。