ORA-01461的解决过程~~

近日生产库中的一个过程报出了ora-1461的错误,虽然错误实际处理起来非常简单,但解决过程中与yangtingkun老大就该问题思想火花的碰撞还是让我颇有收益。

创建一个最简单的示例演示一下错误的触发:

SQL> CREATE TABLE T_VARCHAR (ID VARCHAR2(10));

Table created

SQL> DECLARE

2 V_STR VARCHAR2(10000) := lpad('a',10000,'a');

3 BEGIN

4 INSERT INTO T_VARCHAR VALUES (SUBSTR(V_STR,1,10));

5 END;

6 /

DECLARE

V_STR VARCHAR2(10000) := lpad('a',10000,'a');

BEGIN

INSERT INTO T_VARCHAR VALUES (SUBSTR(V_STR,1,10));

END;

ORA-01461: can bind a LONG value only for insert into a LONG column

ORA-06512: at line 5

一条最简单的insert居然报错了,有意思吧,是因为v_str的值超长?不应该啊,因为我们在insert时是执行了substr的,甚至说将substr改成这样,还是会报错:

SQL> DECLARE

2 V_STR VARCHAR2(10000) := lpad('a',10000,'a');

3 BEGIN

4 INSERT INTO T_VARCHAR VALUES (SUBSTR(V_STR,1,1));

5 END;

6 /

DECLARE

V_STR VARCHAR2(10000) := lpad('a',10000,'a');

BEGIN

INSERT INTO T_VARCHAR VALUES (SUBSTR(V_STR,1,1));

END;

ORA-01461: can bind a LONG value only for insert into a LONG column

ORA-06512: at line 5

显然不会是因为多字节截取问题导致的插入失败,而且如果是插入字符超出列长度的话,应该是报这个错误才对:

SQL> insert into t_varchar values (lpad('a',11,'a'));

insert into t_varchar values (lpad('a',11,'a'))

ORA-12899: value too large for column "TEST"."T_VARCHAR"."ID" (actual: 11, maximum: 10)

下面,改一下我们的插入语句:

SQL> DECLARE

2 V_STR VARCHAR2(10000) := lpad('a',10000,'a');

3 BEGIN

4 V_STR := SUBSTR(V_STR,1,10);

5 INSERT INTO T_VARCHAR VALUES (V_STR);

6 END;

7 /

PL/SQL procedure successfully completed

这下成功了,似乎有点儿头绪,再改一下:

SQL> DECLARE

2 V_STR CHAR(4000) := 'a';

3 BEGIN

4 INSERT INTO T_CHAR VALUES (SUBSTR(V_STR,1,10));

5 END;

6 /

PL/SQL procedure successfully completed

也成功了。ok,基本确认问题所在,总结如下:

字符类型在pl/sql中做为变量存大,最大可支持32767个字节,但在sql中通常只能够支持到4000字节(char/nchar为2000),因此如果声明的变量长度超出了sql中类型长度,并且变量实际值也超出类型可接受最大值时,就会触发ORA-01461错误,解决方法自然相当简单,只要在插入/更新之前截取字符长度到符合要求的长度就可以了。

另外,这里需要注意,一定要在插入/更新之前截取,而不要在插入/更新时substr,如例:

SQL> DECLARE

2 V_STR VARCHAR2(10000) := lpad('a',10000,'a');

3 BEGIN

4 INSERT INTO T_VARCHAR VALUES (SUBSTR(V_STR,1,10));

5 END;

6 /

DECLARE

V_STR VARCHAR2(10000) := lpad('a',10000,'a');

BEGIN

INSERT INTO T_VARCHAR VALUES (SUBSTR(V_STR,1,10));

END;

ORA-01461: can bind a LONG value only for insert into a LONG column

ORA-06512: at line 5

这样也仍然是会出错的,这应该是由于pl/sql引擎在编译时对变量长度的判断先于substr进行,因此不等执行就先报错了。

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

转载于:http://blog.itpub.net/23895263/viewspace-672370/

深入理解与解决Oracle数据库ORA-01461错误:只能为LONG列插入LONG值 综上所述,ORA-01461错误主要出现在尝试将长字符串插入到不支持这种长度的列类型时,或者是对数据类型理解有误的情况下。因此,在进行数据操作时,务必清楚了解各列的数据类型及其特性,并根据实际情况选择合适的数据类型和插入方式,才能避免此类错误的发生。 阅读详情

相关推荐

ORA-01461 仅可以为插入 LONG 列的 LONG 值赋值”解决办法

“ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”

ORA-01461:仅能绑定要插入 LONG 列的 LONG 值

ORA-01461:仅能绑定要插入 LONG 列的 LONG 值 目录: 1.问题描述 2.解决思路及其他 3.问题原因 4.处理办法 5.延伸知识 6.相关参考

specialrun的博客 6万+

图像处理(12)--图像各种噪声及消除方法

文章目录结构1.什么是图像噪声2. 图像噪声来源3. 噪声分类及其消除方法3.1 高斯噪声及其消除方式3.1.1 如何确定一种噪声是高斯噪声3.1.2 高斯滤波消除高斯噪声3.1.3 高斯函数的重要性质3.2 瑞利噪声及其消除方式3.3 伽马(爱尔兰)噪声及其消除方式3.4 指数分布噪声及其消除方式3.5 均匀噪声及其消除方式3.6 脉冲(椒盐)噪声及其消除方式 1.什么是图像噪声 图像噪声是指...

ShaneHolmes 11万+

ora-01461

ora-01461

weixin_43664448的博客 6488

Python爬虫实战:5分钟搞定Web of Science文献批量导出与解析(附完整代码)

本文提供了一套利用Python爬虫技术,快速实现Web of Science文献批量提取与解析的完整方案。通过解析官方导出的HTML文件,结合BeautifulSoup和pandas库,可将文献数据自动转换为结构化的Excel/CSV表格,帮助科研人员高效管理文献信息,节省大量手动整理时间。

weixin_29050513的博客 1166

15. GD32E230定时器实战:基于TIMER5的1秒LED闪烁中断配置详解

本文详细讲解了如何在GD32E230微控制器上配置TIMER5定时器,实现精准的1秒LED闪烁中断。内容涵盖从时钟开启、参数计算、中断设置到服务函数编写的完整流程,重点解析了预分频值与周期值的配置方法,帮助开发者掌握硬件定时器的核心应用。

weixin_29092787的博客 135

ORA-01461错误解决

ORA-01461错误解决 ORA-01461: can bind a LONG value only for insert into a LONG column 原来是用weblogic的连接池,没有问题。 转为tomcat或直接jdbc调用,报错。 原因:使用了ojdbc14.jar,更新为ojdbc6即可。weblogic连接池是不用WEB-INF下的lib的ojdbc.jar的。

ouyida3的专栏 6462

如何在两台电脑间,实现zotero文件和数据两种类型的双向同步

在完成本文配置后,可以在两台不同的电脑间,通过两步简单操作实现zotero数据和文件的双向同步,并且全程免费首先,打开zotero->编辑->首选项->高级->文件与文件夹,配置链接附件根目录以及数据存储位置,前者将pdf文件通过相对地址形式存于zotero中(而非真正的pdf文件),后者则是设置用户本地数据的地址建议设置在数据盘D盘,可以避免后续对盘名的修改(因为基本每个电脑都存在C盘和D盘)然后,同一页面下,打开同步,配置数据以及文件同步方式。数据同步保持默认即可,文件同步选择WebDav,然后去坚果云

weixin_43008154的博客 1万+

ORA-01461

ORA-01461

爱肯的专栏 1324

10种电阻综合对比——《器件手册--电阻》

可变电阻在电子设备中也有很多用途,如在收音机的音量调节电路中,通过旋转可变电阻的旋钮来改变电路中的电阻值,从而改变通过扬声器的电流,实现音量的调节。根据电阻定律,电阻R = ρ(L/S),其中ρ是导体材料的电阻率,L是导体的长度,S是导体的横截面积。比如,同样材料制成的两根电线,粗的电线电阻比细的电线电阻小,长的电线电阻比短的电线电阻大。电流采样电阻的工作原理基于欧姆定律,即电阻两端的电压与通过电阻的电流成正比,公式为 I = V/R,其中 I是电流,V是电阻两端的电压,R 是电阻值。

XU157303764的博客 3144

用python画带有正负值的条形图

常见的条形图只能表现数据的大小,却不能表现值的正负关系。但是其实仅仅使用`pandas`和`matplotlib`两个包就可以实现y轴负轴的添加以及负值的显示,并且可以为正负值分别设置不同的颜色,让条形图看上去更加清晰,易于我们分析

weixin_44853840的博客 5384

ORA-01461和ORA-01483错误

今天遭遇由于ojdbc14.jar版本不正确导致ORA-01461和ORA-01483报错的问题。简单记录一下这个问题的处理过程。 1.应用程序报错现象 以下是从应用程序日志中截取的两段报错信息。 2011-05-05 04:24:28,148 INFO  [org.iata.asdcore.acdm.esb.service.AcdmEsbServiceImpl] The number

&&&思考中前行~~ 4804

基于Python的IMF经济数据爬取与分析:从入门到实战

本文详细介绍了如何使用Python爬取国际货币基金组织(IMF)的经济数据,包括最新的爬虫技术、反反爬策略、数据解析与存储方法。文章从IMF数据源分析开始,逐步讲解如何构建一个完整的爬虫系统,并提供了详细的代码实现和优化建议。通过本文,读者将掌握爬取复杂国际组织数据的关键技术,并能将这些技术应用于其他类似的数据获取场景。关键词:Python爬虫、IMF数据、经济数据获取、数据清洗、反爬策略IMF Data (data.imf.org) - 主要数据门户。

2201_76125261的博客 1439

“ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”解决办法

以前寫過的一篇博文中提到了出現“ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”的原因,并給出了原因和解決方法,在這裡回顧一下。(詳見 当遇到“数据大小超出此类型的最大值”和“仅可以为插入 LONG 列的 LONG 值赋值”时...   ) 當時的環境:  数据库:Oracle 9i 数据库字段类型:varchar2(4000) 输入汉字:大于1000字 原因:    ...

peak 3175

【RKNN】RKNN(Rockchip Neural Network)​​ 的详解

RKNN 为 Rockchip 硬件提供了高效的 AI 推理解决方案,适合需要低功耗、实时响应的边缘场景

浩瀚之水的专栏 1686

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

**kettle 报ORA-01461 解决办法**

kettle 报ORA-01461 解决办法 今天使用kettle从Excel同步数据到oracle过程中出现了一个问题,Excel的一列的数据类型字段,已经超过了oracle限制的varchar(4000)了。 提示报错:ORA-01461: can bind a LONG value only for insert into a LONG column 百度了各种方案后,发现一个方案非常好用且简单 解决方案为: 修改oracle表的数据类型即可。 示例: alter table <表名>

m0_54488773的博客 1167

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

出现ORA-01461:仅能绑定要插入LONG列的LONG值 mybatis+orcale

批量存储CLOB类型: 原sql语句: insert into Users (fid,fname) <foreach open="(" close=")" collection="list" item="item" index="index" separator="union"> select #{item.fid,jdbcType=VARCHAR}, #

HappyLife_haha的专栏 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

遭遇ORA-01461

今天接到开发人员报告:在用jdbc导入数据时遇到ORA-01461ORA-01461 can bind a LONG value only for insert into a LONG columnCause: An attem...

cuilin2183的博客 448

ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值

日志错误信息: 2012-02-21 15:42:11,928 DEBUG [org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator] - 2012-02-21 15:42:11,928 DEBUG [org.springframework.jdbc.support.SQLStateSQLExceptionTra

开心就好~~~专栏 6万+

php+ora01461,ORA-01461错误解决

ORA-01461: can bind a LONG value only for insert into a LONG column原来是用weblogic的连接池,没有问题。转为tomcat或直接jORA-01461错误解决方法:ORA-01461: can bind a LONG value only for insert into a LONG column原来是用weblogic的连接池...

weixin_30978959的博客 601

mybatis批量插入报 ORA-01461-仅能绑定要插入LONG列的LONG值

一,Mybatis Oracle实现批量插入 <insert id="insertUserBatch" parameterType="java.util.List"> INSERT INTO table_user ( id, user_code, user_name ) <foreach collection="userList" item="item" index="index" separator="UNION ALL

Orient的博客 1981

ora 01461 php oracle,Oracle ORA-01461 异常解决

最近开发一个J2EE项目,使用的数据库是oracle,测试过程中发现偶尔会有 ORA-01461 can bind a LONG value only for insert into最近开发一个J2EE项目,使用的数据库是Oracle,测试过程中发现偶尔会有 ORA-01461 can bind a LONG value only for insert into a LONG column 的异常...

weixin_33001305的博客 398

ora 01461 php oracle,ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值

在操作数据库的时候,讲一个数值保存到一个VARCHAR(2000)的字段里面,出现了下面的错误:仅能绑定要插入 LONG 列的 LONG 值。以下是我的错误异常日志org.springframework.jdbc.UncategorizedSQLException:### Error updating database. Cause: java.sql.SQLException: ORA-014...

weixin_39835321的博客 540
上一篇: ora - 100501 Non oracle error
下一篇: 通过了OCP考试
cuiting4706
博客等级 码龄11年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值