代码之家  ›  专栏  ›  技术社区  ›  David542

如果列被命名为rowid,如何检索rowid?

  •  0
  • David542  · 技术社区  · 2 年前

    假设我有下表:

    CREATE or replace TABLE t (id INT, content STRING, rowid INT);
    INSERT INTO t VALUES (42, 'hello', 5), (43, 'world', 5);
    

    我该如何获得这两个 rowid 伪列以及 粗鲁的 数据库中的实际列?

    例如,做以下事情:

    select id, content, rowid, ?rowid-pseudocolumn?
    from t;
    

    参考: https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns008.htm

    此外,一般来说,如果存在“影子列”,如果存在相同的命名用户列,是否有任何过程可以检索该列?

    2 回复  |  直到 2 年前
        1
  •  1
  •   Paul W    2 年前

    任何用作对象标识符的非法关键字或对象标识符中的非法字符都可以在 双引号 ,但是 ROWID 所有的帽子都是不允许的。但是,您可以将其设置为小写:

    create table t (id integer, content varchar2(50),"rowid" rowid); -- if storing actual ROWIDs, otherwise use integer datatype 
    
    select id,content,"rowid",rowid from t; -- shows stored rowid col and the real rowid separately
    

    但请注意,将rowid存储为永久列值通常是一个非常糟糕的主意,因此这不是应该经常出现的事情(如果有的话)。而且,如果有合法的理由这样做,那么最好简单地重命名列,以避免对其进行不同的处理(例如。 ROW_ID ,或者如果只是一个与Oracle的rowid无关的数字,则完全不同以避免混淆)。

        2
  •  1
  •   Randy    2 年前

    在尝试构建这样的表时,应该会出现无效标识符错误或类似的保留字错误。