在oracle中插入一个很长字符串时报这个错,去网上找大多说是字符集格式或者数据库驱动版本的问题。但是我这里面插入的全是英文字符,所以应该不是字符集的问题。另外我去oracle下了一个跟我数据库版本一致的驱动ojdbc14.jar,问题也没有有解决。
最终把对应的字段改成long类型,问题解决了。我的数据库版本是"Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi"。
关于oracle的long数据类型,有篇文章说的很详细。以下转自:http://whitechief.itpub.net/post/1825/47242
=============================================
1、LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB。
2、对于超出一定长度的文本,基本只能用LONG类型来存储,数据字典中很多对象的定义就是用LONG来存储的。
1、LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB。
2、对于超出一定长度的文本,基本只能用LONG类型来存储,数据字典中很多对象的定义就是用LONG来存储的。
3、LONG类型主要用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。
4、很多工具,包括SQL*Plus,处理LONG 数据类型都是很困难的。
5、LONG 数据类型的使用中,要受限于磁盘的大小。
能够操作 LONG 的 SQL 语句:
1、Select语句
2、Update语句中的SET语句
3、Insert语句中的VALUES语句
限制:
1、一个表中只能包含一个 LONG 类型的列。
2、不能索引LONG类型列。
3、不能将含有LONG类型列的表作聚簇。
4、不能在SQL*Plus中将LONG类型列的数值插入到另一个表格中,如insert into ...select。
5、不能在SQL*Plus中通过查询其他表的方式来创建LONG类型列,如create table as select。
6、不能对LONG类型列加约束条件(NULL、NOT NULL、DEFAULT除外),如:关键字列(PRIMARY KEY)不能是 LONG 数据类型。
7、LONG类型列不能用在Select的以下子句中:where、group by、order by,以及带有distinct的select语句中。
8、LONG类型列不能用于分布查询。
9、PL/SQL过程块的变量不能定义为LONG类型。
10、LONG类型列不能被SQL函数所改变,如:substr、instr。
因为long类型的数值不能用insert into ... select的方法插入,故我们要分两步走,先插入其它字段,最后再插入long类型字段,这可以通过过程来实现.下面是一个我做实验实现的例子.
SQL>; create table testlong (id number,name varchar2(12),history long);
表已创建。
SQL>; create table testlong1 (id number,name varchar2(12),history long);
表已创建。
SQL>; insert into testlong values(1,'dwh','work in foshan');
已创建 1 行。
SQL>; insert into testlong values(2,'sfg','work in guangzhou');
已创建 1 行。
SQL>; select * from testlong;
ID NAME
---------- ------------------------
HISTORY
--------------------------------------------------------------------------------
1 dwh
work in foshan
2 sfg
work in guangzhou
SQL>; insert into testlong1 select * from testlong;
insert into testlong1 select * from testlong
*
ERROR 位于第 1 行:
ORA-00997: 非法使用 LONG 数据类型
SQL>; Declare
2 CURSOR bcur
3 IS SELECT id,history from testlong;
4 brec bcur%ROWTYPE;
5 BEGIN
6 insert into testlong1(id,name) select id,name from testlong;--其它类型
先插入
7 OPEN bcur;
8 LOOP
9 FETCH bcur INTO brec;
10 EXIT WHEN bcur%NOTFOUND;
11 update testlong1 set history=brec.history where id=brec.id;
12 END LOOP;
13 CLOSE bcur;
14 END;
15 /
PL/SQL 过程已成功完成。
SQL>; select * from testlong1;
ID NAME
---------- ------------------------
HISTORY
--------------------------------------------------------------------------
1 dwh
work in foshan
2 sfg
work in guangzhou
分享到:
相关推荐
“ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”
ora-01033:oracle initialization or shutdown in progress 解决方法 ora-01033:oracle initialization or shutdown in progress 解决方法 ora-01033:oracle initialization or shutdown in progress 解决方法 ora-...
在运行查询SELECT * FROM V$SESSION 会出现ORA-29275:部分多字节字符的错误,这是什么原因开始我不得其解,网上也没有介绍什么好办法。本文给出答案。
调整参数后引起,ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least 3 2768M 的解决方案
ORA-12154: TNS: 无法解析指定的连接标识符的解决方法
ORA-32001:write to spfile requested but no spfile is in use请求写入spfile,但没有使用spfile的解决方法 在输入以下语句中报了这样的错误: SQL>alter system set control_files=’/u01/app/oracle/oradata/prod/...
ORA-00031:标记要终止的会话解决方案; ORA-00031:标记要终止的会话解决方案;
ORA-01036:非法的变量名/编号 oracle特有的错误
oracle12c程序连接时异常: ORA-01017: 用户名/口令无效; 登录被拒绝 的解决方案。
oracle 12 c ORA-01017: 用户名/口令无效; 登录被拒绝
-- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... ...
NULL 博文链接:https://3w1h.iteye.com/blog/1211779
oracle报错ora-12541:TNS无监听程序
解决ORACLE TNS: 无法解析指定的连接标识符; 里面有步骤
最近在工作中遇到了一个问题,错误是Oracle dbca时报错:ORA-12547: TNS:lost contact,通过查找相关的资料终于找到了解决的方法,下面分享给大家,话不多说了,来一起看看详细的介绍吧。 环境: OS:RHEL6.5 x86-...
ORA-27303: additional information: MTU could not be verified. Did not receive valid message. These errors are caused by more aggressive checking introduced in 10.2.0.4. Likelihood of Occurrence ...
错误描述:oracle远程连接服务器出现 ORA-12170 TNS:连接超时 错误检查:有很多是oracle自身安装的问题,但是我这里服务器配置正常,监听正常,服务正常,远程可以ping通服务器。 这里主要是防火墙问题,解决办法: ...
ora-12514:TNS:监听程序当前无法识别连接描述符中请求的服务bug,解决文档.
CLOB字段类型报错 ORA-01704:文字字符串过长的解决
oracle19c缺少的函数