ITPub博客

首页 > Linux操作系统 > Linux操作系统 > TABLE居然也是数据类型

TABLE居然也是数据类型

原创 Linux操作系统 作者:yangtingkun 时间:2009-02-19 23:57:29 0 删除 编辑

发现了一个很有意思的现象,居然TABLE也可以当作数据类型用。

 

 

TABLE作为数据类型建表:

SQL> CREATE TABLE T_TABLE (ID TABLE);

表已创建。

SQL> DESC T_TABLE
 
名称                                                              是否为空? 类型
 ----------------------------------------------------------------- -------- --------------
 ID                                                                         RAW(16)

建表没有报错就很神奇了,在看看ID列的数据类型,居然是RAW(16)

STANDARD包中没有找到对TABLE的定义,而且这个TABLE类型在PL/SQL中也是不可用的:

SQL> DECLARE
  2  V_TAB TABLE;
  3  BEGIN
  4  INSERT INTO T_TABLE VALUES (V_TAB);
  5  END;
  6  /
V_TAB TABLE;
           *
2 行出现错误:
ORA-06550:
2 , 12
:
PLS-00103:
出现符号 ";"在需要下列之一时:

(

查询了一下DBA_TYPES视图,倒是存在TABLE类型:

SQL> SELECT TYPE_NAME, TYPE_OID
  2  FROM DBA_TYPES
  3  WHERE TYPE_NAME = 'TABLE';

TYPE_NAME                      TYPE_OID
------------------------------ --------------------------------
TABLE                          0000000000000000000000000000001E

可以发现TABLE类型的TYPE_OID的数据类型倒是RAW(16)

SQL> SELECT DATA_TYPE, DATA_LENGTH
  2  FROM DBA_TAB_COLUMNS
  3  WHERE TABLE_NAME = 'DBA_TYPES'
  4  AND COLUMN_NAME = 'TYPE_OID'
  5  AND WNER = 'SYS';

DATA_TYPE                      DATA_LENGTH
------------------------------ -----------
RAW                                     16

莫非是Oracle把这个类型作为TABLE的类型。

通过设置EVENTS跟踪了一下,没有找到任何有价值的东西,怀疑这部分是在Oracle的内核中通过C实现的,因此看不到具体是如何实现的。

不过这个SQL语句在91011中都可以执行,不知道是Oracle有意为之,还是一个没有被发现的bug

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-555730/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 触发器迭代限制
请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10470006