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/

10-10 21:45