create table T
(
ID number,
COL1 SYS.XMLTYPE
)XMLType COLUMN COL1 STORE AS CLOB;
select obj#,col#,intcol#,name,type#
from sys.col$
where obj#='98134'
OBJ# COL# INTCOL# NAME TYPE#
------ ---- ---------- ------- ------
98134 1 1 ID 2
98134 2 2 COL1 58
98134 2 3 SYS_NC00003$ 112
select obj#,col#,intcol#
from sys.coltype$
where obj#=98134
OBJ# COL# INTCOL#
------ ---- ----------
98134 2 2
为什么第一个结果集包含三列,而第二个结果集仅包含一列。我想更多地了解这两个表之间的区别。
谢谢。
最佳答案
COL$
是所有列的数据字典表。那就是表上所有可见的列加上不可见的列。因此,第一个查询返回ID为COL1和SYS_NC00003 $的三行。这是XMLTYPE列的离线存储(这就是COL#相同而INTCOL#不同的原因)。COLTYPE$
是数据字典表,用于声明为复杂数据类型的列。所以COl1的COL$.TYPE#
是58;它映射为ANYDATE或XMLTYPE的数据类型,它们是复杂的数据类型。其他两列的数据类型分别为NUMBER(COL$.TYPE# = 2
)和CLOB(COL$.TYPE# = 112
),它们都是Oracle的“原语”。这就是为什么COLTYPE$
查询中只有一条记录的原因
关于oracle - sys.col $和sys.coltype $之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26397442/