我正在Oracle SQL中运行以下查询。表有2列,第一列是rowid类型,第二列是varchar。
INSERT INTO MYTABLE SELECT 'AAAAAAAAAAAAAAAAAA' RID, NULL FROM DUAL;
结果是在两列中都添加了空值。
为什么会这样?
'AAAAAAAAAAAAAAAAAA'不能添加到表格的第一列吗?
答案 0 :(得分:0)
ROWID is a pseudocolumn不会存储,只能选择。因此,您的RID不是行ID。
没有其他详细信息,似乎您使用的是EXTENDED ROWID:
扩展的rowid存储为以64为基的值,其中可以包含字符A-Z,a-z,0-9,加号(+)和正斜杠(/)。扩展的rowid不能直接使用。您可以使用提供的包DBMS_ROWID来解释扩展的rowid内容。程序包函数提取并提供可直接从受限制的rowid以及扩展的rowid专用的信息中获取的信息。
如文档中所述,您不仅可以简单地选择它,还必须使用DBMS_ROWID来存储或获取它们。
答案 1 :(得分:0)
将'AAAAAAAAAAAAAAAAAAAAA'添加到rowid数据类型列中时,oracle将字符串转换为rowid并将其存储在其中。
select chartorowid('AAAAAAAAAAAAAAAAAA') from dual; -- Result: NULL
“ AAAAAAAAAAAAAAAAAAAAA”行标识不代表任何物理位置。实际上,Oracle使用“ AAAAAAAAAAAAAAAAAA”行标识代表当前正在处理但实际上不存在的行。例如在触发器中(新行)。
考虑到rowid是Oracle使用的特殊rowid,它分配给逻辑上而非物理上存在的所有行。
希望,这就是您要寻找的答案。