TABLE居然也是数据类型

发现了一个很有意思的现象,居然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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/4227/viewspace-555730/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值