sys.col$ 和 sys.coltype$ 的区别

Posted

技术标签:

【中文标题】sys.col$ 和 sys.coltype$ 的区别【英文标题】:The differences between sys.col$ and sys.coltype$ 【发布时间】:2014-12-11 09:49:22 【问题描述】:
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

为什么第一个结果集包含三列,而第二个结果集只包含一列。我想更多地了解这两个表之间的区别。

谢谢。

【问题讨论】:

【参考方案1】:

COL$ 是所有列的数据字典表。那就是表上所有可见的列加上不可见的列。因此,第一个查询返回 ID、COL1 和 SYS_NC00003$ 的三行。这是 XMLTYPE 列的离线存储(这就是 COL# 相同而 INTCOL# 不同的原因)。

COLTYPE$ 是声明为复杂数据类型的列的数据字典表。所以 COL$.TYPE# 对于 COl1 是 58 ;这映射到 ANYDATE 或 XMLTYPE 的数据类型,它们是复杂的数据类型。另外两列的数据类型为 NUMBER (COL$.TYPE# = 2) 和 CLOB (COL$.TYPE# = 112),它们都是 Oracle“原语”。所以COLTYPE$的查询只有一条记录

【讨论】:

以上是关于sys.col$ 和 sys.coltype$ 的区别的主要内容,如果未能解决你的问题,请参考以下文章

在SQL中如何把组合字段

在oracle9中如何实现wm_concat的功能

TCP和UDP和IP和HTTP和socket

malloc和free,brk和sbrk和mmap和munmap的使用和关系以及内存分配的原理

平视生活和工作中遇到的问题和挑战

数组和链表的区别ArrayList和LinkedList的区别使用LinkedList模拟栈和队列