【问题标题】:Why is ROWID data type represented as a character subtype - Oracle SQL为什么 ROWID 数据类型表示为字符子类型 - Oracle SQL
【发布时间】:2015-12-06 19:53:31
【问题描述】:

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

【问题讨论】:

    标签: sql oracle sqldatatypes rowid


    【解决方案1】:

    我建议 tutorialspoint 有点过于简单化了。当你使用它时,它只是看起来像一个字符类型。

    它不像字符类型那样存储。事实上,要对其进行字符操作(例如 CONCAT),您必须将其转换为字符类型。至于为什么将其表示为字符类型,它可能只是对可以在 SQL 查询工具中显示/复制和粘贴/键入的东西的一个很好的折衷,但可以存储更多信息比一个简单的数字更密集。如果它只是数字,它可能会很长,因为它是一个 80 位的数字......

    A number encoded in base 64 using letters and numbers,这就是 ROWID 的实际含义,换句话说,与原始 10 字节数字相比,人类处理起来要简单得多。

    【讨论】:

      【解决方案2】:

      它被存储为字节,就像其他所有东西一样。

      例如,'AAAACOAABAAAAR5AAA' 存储为 00 00 00 8e 00 40 04 79 00 00。但仅在您创建和填充用户列的情况下。使用

      选择的ROWID
      SELECT ROWID FROM some_table
      

      不存储在任何地方,它是行的物理地址,格式为:

      对象id、文件号(对于小文件表空间)、块号、块偏移量

      ROWID 元素以 Base64 编码形式显示。

      【讨论】:

        猜你喜欢
        • 2012-07-21
        • 1970-01-01
        • 2011-03-31
        • 1970-01-01
        • 1970-01-01
        • 2018-12-09
        • 2022-01-23
        • 2021-05-18
        • 2010-11-13
        相关资源
        最近更新 更多