大数据字段有为CLOB,BLOB,LONG
一、CLOB(Character Large Object)
用于存储大文本
直接写insert存是存进去了,但是当超过2000字节时,仍然报错:
数字或值错误 : 字符串缓冲区太小
这是因为,存进去的时候,如果直接写在value中,自动会识别为字符串类型,正确做法应该是,先绑定一个clob类型的变量。
DECLARE
V_LANG CLOB := :CONTENT;
BEGIN
INSERT INTO TB
(ID,CONTENT)
VALUES
('273e3ba0-0192-4a03-b84b-dae211b4c1bb',V_LANG );
取值的时候
//clob->string
Clob clobContent = rs.getClob("CONTENT");
String content = "";
if(clobContent != null){
content = clobContent.getSubString((long)1,(int)clobContent.length());
}
二、BLOB(Binary Large Object)
常用于存储二进制文本
之前做BLOB字段的时候,直接使用下列代码,后发现还是有问题的。
- 插入
使用rawtohex函数,将一个二进制构成的字符串转换为十六进制,直接用string类型传进去即可
INSERT INTO tb (....,RAWTOHEX(:CONTENT),...) .....
paraMap.put("CONTENT", model.getContent() == null ? "" : model.getContent());
- 取值
使用 utl_raw.cast_to_varchar2 函数,取出来为string
SELECT utl_raw.cast_to_varchar2(d.CONTENT) as CONTENT FROM tb;
这里仍然是没有绑定变量,然后当成了varchar2类型,只能插入2000。猜想如上绑定变量即可,未实现。