LONG 类型与TO_LOB函数
TO_LOB函数是一个很特殊的函数,特殊之处在于,这个函数可以处理LONG类型数据,而且这个函数和LONG类型一样,拥有很多的限制。不过,这些还不是很特殊的地方,下面简单看一下TO_LOB这个函数。
Oracle的LONG类型可谓“臭名昭著”,由于LONG类型的限制太多,以至于Oracle很少去提LONG类型有哪些限制条件,而一般都是通过说明在哪些情况下,可以使用LONG类型。
正是这些限制阻止了LONG的使用,Oracle也在推出了大对象类型——LOB之后,强烈建议用户不要在使用LONG类型。
但是,具有讽刺意味的是,Oracle建议用户不要再使用LONG类型,可是数据字典中,随处可以看到LONG的身影。而且,即使是目前使用的最高版本10R2,LONG类型仍然在数据字典中随处可见。不知道Oracle是考虑兼容性的问题还是其他什么原因,反正Oracle仍然没有把LONG类型从数据字典中移出去。不知道11g中是否有所改观。
虽然Oracle自己没有做到,但是仍然建议用户不要在使用LONG,并使用BLOB、CLOB来替换现有系统中的LONG字段。而且LONG类型的限制也确实使人头疼,将LONG类型转化为LOB类型的工具,就是TO_LOB函数。
TO_LOB函数和LONG类型一样,限制有很多。简单的说,TO_LOB一般只用在CREATE TABLE或INSERT TABLE语句后面的子查询中。在其他地方使用会报错,比如UPDATE语句。
这还不是最大的问题,最大的问题在于,TO_LOB函数似乎并没有真正的将LONG类型转化为LOB数据类型。个人感觉,Oracle只是对LONG类型做了一些处理,使之可以存放到一个LOB类型中去。
SQL> CREATE TABLE T1 (ID NUMBER, TEXT CLOB);
表已创建。
SQL> CREATE TABLE T2 (ID NUMBER, TEXT VARCHAR2(4000));
表已创建。
SQL> INSERT INTO T1 SELECT ROWNUM, TEXT FROM DBA_VIEWS;
INSERT INTO T1 SELECT ROWNUM, TEXT FROM DBA_VIEWS
*第 1 行出现错误:
ORA-00997: illegal use of LONG datatype
SQL> INSERT INTO T1 SELECT ROWNUM, TO_LOB(TEXT) FROM DBA_VIEWS;
已创建2268行。
SQL> COMMIT;
提交完成。
使用TO_LOB可以将LONG数据插入到CLOB字段中,但是如果想要将LONG数据插入到VARCHAR2中:
SQL> INSERT INTO T2 SELECT ROWNUM, TEXT FROM DBA_VIEWS;
INSERT INTO T2 SELECT ROWNUM, TEXT FROM DBA_VIEWS
*第 1 行出现错误:
ORA-00997: illegal use of LONG datatype
SQL> INSERT INTO T2 SELECT ROWNUM, DBMS_LOB.SUBSTR(TO_LOB(TEXT), 4000, 1) FROM DBA_VIEWS;
INSERT INTO T2 SELECT ROWNUM, DBMS_LOB.SUBSTR(TO_LOB(TEXT), 4000, 1) FROM DBA_VIEWS
*第 1 行出现错误:
ORA-00932: inconsistent datatypes: expected - got LONG
直接插入肯定不行,但是刚才已经得到了CLOB类型,那么将CLOB转化为VARCHAR2不就可以了?但是结果确出人意料。观察错误信息,Oracle认为返回的数据类型是LONG。似乎TO_LOB并没有进行数据类型的转化。下面再验证一下:
SQL> SELECT DUMP(TO_LOB(TEXT)) FROM DBA_VIEWS;
SELECT DUMP(TO_LOB(TEXT)) FROM DBA_VIEWS
*第 1 行出现错误:
ORA-00932: inconsistent datatypes: expected - got LONG
SQL> SELECT DUMP(TEXT) FROM T1;
SELECT DUMP(TEXT) FROM T1
*第 1 行出现错误:
ORA-00932: inconsistent datatypes: expected - got CLOB
从这个对比中已经可以清楚的看到,TO_LOB函数并不像想象中的那样返回CLOB类型,而实际上返回的仍然是LONG类型。
SQL> INSERT INTO T2 SELECT ROWNUM, TO_LOB(TEXT) FROM DBA_VIEWS;
已创建2268行。
直接使用TO_LOB似乎可以插入,但是仔细对比一下结果就会发现,LONG类型数据没有真正的插入到表中:
SQL> COL TEXT FORMAT A50
SQL> SET LONG 50
SQL> SELECT * FROM T2 WHERE ROWNUM < 3;
ID TEXT
---------- --------------------------------------------------
1
2
SQL> SELECT * FROM T1 WHERE ROWNUM < 3;
ID TEXT
---------- --------------------------------------------------
1 select OWNER, TABLE_NAME, TABLESPACE_NAME, CLUSTER
2 select a.apply_name, a.queue_name, a.queue_owner,
LONG 类型与TO_LOB函数相关推荐
- Long类型传到前端失去精度(2):Long类型不是实体类的某一个字段,Long类型是一个函数的返回值
Long类型传到前端失去精度(2):Long类型不是实体类的某一个字段,Long类型是一个函数的返回值 又是转换Mybatis-Plus的一天,又遇到了之前熟悉的问题:Long类型传到前端失去精度.可 ...
- 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )
文章目录 I . 函数类型 II . 带参数名的参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 的函数类型 VII . 函数类型实例化 ...
- python查看dataframe数据类型_python pandas中DataFrame类型数据操作函数的方法
python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数 ...
- Delphi 变体类型(Variant)的介绍(流与变体类型的相互转换、变体类型常用的函数)...
来源:http://blog.csdn.net/xiongmao000738/article/details/6863988 一.变体类型常用的函数介绍: Variant: 一种可以拥有各种数据类型: ...
- Racket 6.11提供了稳定的细化类型和依赖函数特性
Typed Racket是Racket语言的一种静态类型方言.Racket 6.11为Typed Racket提供了细化类型(Refinement Type)和依赖函数(Dependent Funct ...
- 类型和原生函数及类型转换(一)
一.内置类型: 空值:null 未定义:undefined 布尔值:boolean 数字:number 字符串:string 对象:object 符号:symbol(ES6新增) 1.null类型的值 ...
- python可变类型与不可变类型作为函数参数区别_不要用可变类型对象做函数默认参数...
不要用可变类型对象做函数默认参数 1. 可变对象做默认参数 内置数据类型int,float,bool,str,tuple 是不可变对象, 字典,集合,列表是可变对象. 在定义python函数时,千万不 ...
- python dataframe函数_python pandas中DataFrame类型数据操作函数的方法
这篇文章主要介绍了关于python pandas中DataFrame类型数据操作函数的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 python数据分析工具pandas中Data ...
- C++ 学习笔记(19)new/delete表达式、定位new、typeid、dynamic_cast、type_info、枚举类型、成员函数指针、union、位域、volatile限定符、链接指示
C++ 学习笔记(19)new/delete表达式.定位new.typeid.dynamic_cast.type_info.枚举类型.成员函数指针.union.位域.volatile限定符.链接指示 ...
最新文章
- 淘宝店、淘宝商城排名规则及流量提升培训教程
- 使用system函数时应该忽略两个信号
- 全面分析 Spring 的编程式事务管理及声明式事务管理(转)
- 【Numpy】学习笔记1
- git常见错误failed to push some refs to
- 医学工作者如何进行医学科研设计?
- tomcat与apache区别
- php is_dir 判断是否存在这目录
- 浦发银行出现:部件'InstallCertListAx.ocx'或其附件之一不能正确注册:一个文件丢失 解决...
- 解决word、excel、ppt文件图标是空白的问题
- 如何管好下属(转载)
- [转用 jsfl 扩展你的 flash
- 放生切勿盲目,放生动物要有选择
- 肠道细菌产生的神经递质调节宿主的感觉行为
- HAIKUO-SOFT 作品推荐 四叶草 よつのは 攻略
- 数学之美 读书心得与笔记
- C22_OC12-protocol协议
- CSS hover改变背景图片过渡动画生硬
- 2021全球程序员收入报告!字节高级码农年薪274万元排第5
- 微信小程序的socket.io即时通讯开发(基于E聊SDK)