ORA-06502:PL/SQL :numberic or value error: character string buffer too small
今天遇到一个错误提示:ORA-06502:PL/SQL :numberic or value error: character string buffer too small,一般对应的中文信息为:ORA-06502: PL/SQL: 数字或值错误 :字符串缓冲区太小。仔细检查调试过程中才发现是开发人员定义了一个变量,但是在脚本里面赋予了该变量超过其长度的值。结果就报这个错误。我习惯总结每一个遇到的错误信息,既有利于学习、总结知识,也方便以后遇到此类问题能够及时给出解决方法。
如果执行oerr ora 06502命令,没有提及详细原因(Cause)以及解决方法(Action)。这个估计是出现这类错误的场景太多了的缘故。
$ oerr ora 06502
06502, 00000, "PL/SQL: numeric or value error%s"
// *Cause:
// *Action:
在官方文档http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/datatypes.htm,我看到了关于ORA-06502的错误的一些出现场景。非常有意思。有兴趣的最好直接阅读源文档。
1: 赋值或插入超过长度的值。
Assigning or Inserting Too-Long Values
If the value that you assign to a character variable is longer than the maximum size of the variable, an error occurs. For example:
1: DECLARE
2:
3: c VARCHAR2(3 CHAR);
4:
5: BEGIN
6:
7: c := 'abc ';
8:
9: END;
10:
11: /
12:
13: Result:
14:
15: DECLARE
16:
17: *
18:
19: ERROR at line 1:
20:
21: ORA-06502: PL/SQL: numeric or value error: character string buffer too small
22:
23: ORA-06512: at line 4
24:
2: 违反了SIMPLE_INTEGER Subtype约束
PLS_INTEGER and its subtypes can be implicitly converted to these data types:
·
· CHAR
·
· VARCHAR2
·
· NUMBER
·
· LONG
All of the preceding data types except LONG, and all PLS_INTEGER subtypes, can be implicitly converted to PLS_INTEGER.
A PLS_INTEGER value can be implicitly converted to a PLS_INTEGER subtype only if the value does not violate a constraint of the subtype. For example, casting the PLS_INTEGER value NULL to the SIMPLE_INTEGER subtype raises an exception, as Example 3-5 shows.
Example 3-5 Violating Constraint of SIMPLE_INTEGER Subtype
1: DECLARE
2:
3: a SIMPLE_INTEGER := 1;
4:
5: b PLS_INTEGER := NULL;
6:
7: BEGIN
8:
9: a := b;
10:
11: END;
12:
13: /
14:
15: Result:
16:
17: DECLARE
18:
19: *
20:
21: ERROR at line 1:
22:
23: ORA-06502: PL/SQL: numeric or value error
24:
25: ORA-06512: at line 5
26:
3: User-Defined Constrained Subtype Detects Out-of-Range Values
Example 3-7 User-Defined Constrained Subtype Detects Out-of-Range Values
1: DECLARE
2:
3: SUBTYPE Balance IS NUMBER(8,2);
4:
5: checking_account Balance;
6:
7: savings_account Balance;
8:
9: BEGIN
10:
11: checking_account := 2000.00;
12:
13: savings_account := 1000000.00;
14:
15: END;
16:
17: /
18:
19: Result:
20:
21: DECLARE
22:
23: *
24:
25: ERROR at line 1:
26:
27: ORA-06502: PL/SQL: numeric or value error: number precision too large
28:
29: ORA-06512: at line 9
30:
4: Implicit Conversion Between Constrained Subtypes with Same Base Type
A constrained subtype can be implicitly converted to its base type, but the base type can be implicitly converted to the constrained subtype only if the value does not violate a constraint of the subtype (see Example 3-5).
A constrained subtype can be implicitly converted to another constrained subtype with the same base type only if the source value does not violate a constraint of the target subtype.
Example 3-8 Implicit Conversion Between Constrained Subtypes with Same Base Type
1: DECLARE
2:
3: SUBTYPE Digit IS PLS_INTEGER RANGE 0..9;
4:
5: SUBTYPE Double_digit IS PLS_INTEGER RANGE 10..99;
6:
7: SUBTYPE Under_100 IS PLS_INTEGER RANGE 0..99;
8:
9: d Digit := 4;
10:
11: dd Double_digit := 35;
12:
13: u Under_100;
14:
15: BEGIN
16:
17: u := d; -- Succeeds; Under_100 range includes Digit range
18:
19: u := dd; -- Succeeds; Under_100 range includes Double_digit range
20:
21: dd := d; -- Raises error; Double_digit range does not include Digit range
22:
23: END;
24:
25: /
26:
27: Result:
28:
29: DECLARE
30:
31: *
32:
33: ERROR at line 1:
34:
35: ORA-06502: PL/SQL: numeric or value error
36:
37: ORA-06512: at line 12
38:
5: Implicit Conversion Between Subtypes with Base Types in Same Family
Example 3-9 Implicit Conversion Between Subtypes with Base Types in Same Family
1: DECLARE
2:
3: SUBTYPE Word IS CHAR(6);
4:
5: SUBTYPE Text IS VARCHAR2(15);
6:
7: verb Word := 'run';
8:
9: sentence1 Text;
10:
11: sentence2 Text := 'Hurry!';
12:
13: sentence3 Text := 'See Tom run.';
14:
15: BEGIN
16:
17: sentence1 := verb; -- 3-character value, 15-character limit
18:
19: verb := sentence2; -- 5-character value, 6-character limit
20:
21: verb := sentence3; -- 12-character value, 6-character limit
22:
23: END;
24:
25: /
26:
27: Result:
28:
29: DECLARE
30:
31: *
32:
33: ERROR at line 1:
34:
35: ORA-06502: PL/SQL: numeric or value error: character string buffer too small
36:
37: ORA-06512: at line 13
38:
39:
40:
ORA-06502:PL/SQL :numberic or value error: character string buffer too small的更多相关文章
- PL/SQL: numeric or value error: character to number conversion error
在最简单的plsql块编程中出现这个错误,是因为 DBMS_OUTPUT.PUT_LINE('the x is '+x);这里面不能用“+”,而是要用“||” DECLARE x number; ; ...
- PL/SQL异常处理
As we all known,程序的错误一般分为两类:编译错误和运行时错误.其中运行时错误被称为异常.PL/SQL语句块中处理异常的部分即为异常处理部分.在异常处理部分,可以指定当特定异常发生时所采 ...
- PL/SQL EXCEPTION捕获抛出异常
EXCEPTION抛出异常 处理除数为零异常 declare varA number; begin varA:=10/0; dbms_output.put_line('IT WILL NOT WORK ...
- 全面对比T-SQL与PL/SQL
1)数据类型 TSQL PL/SQL numeric(p,s) numeric(p,s) or NUMBER(p,s) decimal(p,s) decimal(p,s) or NUMBER(p,s) ...
- ddl in PL/SQL
If you write DDL directly in PL/SQL. You will hit error. 1 DECLARE 2 str_sql varchar2(500); 3 begin ...
- Oracle 的PL/SQL语言使用
--PL/SQL语言(procedure language 过程化语言) --1.声明类型 declare k number; m ; --Character String buffer too sm ...
- PL/SQL 用户自定义子类型
子类型具有与其基本类型相同的操作,但只有基本类型有效值的子集. 例如,PL/SQL预先定义子类型CHARACTER和INTEGER,如下所示: SUBTYPE CHARACTER IS CHAR; S ...
- PL/SQL Developer 与tnsnames.ora
PL/SQL Developer 是一款流行的oracle开发与管理的IDE. 在登录PL/SQL Developer时所选择的数据库依赖于tnsnames.ora文件中的信息. 如果我们安装了多个o ...
- PLSQL Developer概念学习系列之登录连接Oracle时出现(没有登录) -PL / SQL Developer:ORA - 12541: TNS :无建听程序的错误解决办法(图文详解)
不多说,直接上干货! 前期博客 PLSQL Developer概念学习系列之如何正确登录连接上Oracle(图文详解) 如用scott.scott_password进行登录,orcl是全局数据库 ...
随机推荐
- geotrellis使用(八)矢量数据栅格化
目录 前言 栅格化处理 总结 参考链接 一.前言 首先前几天学习了一下Markdown,今天将博客园的编辑器改为Markdown,从编写博客到界面美观明显都清爽多了,也能写出各种样式的东 ...
- 【集合框架】JDK1.8源码分析之Comparable && Comparator(九)
一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Comparator,虽然它们与集合没有显示的关系,但是它们只有在集合里面的时候才能发挥最大的威力.下面是开始我 ...
- VS Code - Debugger for Chrome调试JavaScript的两种方式
VS Code - Debugger for Chrome调试JavaScript的两种方式 最近由于出差的缘故,博客写的不是很多,一直想写一篇VS Code - Debugger for Chrom ...
- mybatis入门基础(九)----逆向工程
一.什么是逆向工程 mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml.po. ...
- jQuery-1.9.1源码分析系列(六) 延时对象应用——jQuery.ready
还记不记得jQuery初始化函数jQuery.fn.init中有这样是一个分支 //document ready简便写法$(function(){…}) } else if ( jQuery.isFu ...
- js晋级篇——前端内存泄漏探讨
1.IE7/8 DOM对象或者ActiveX对象循环引用导致内存泄漏 循环引用分为两种: 第一种:多个对象循环引用 var a=new Object; var b=new Object; a.r=b; ...
- 六、CsrfViewMiddleware
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF. 你这可 ...
- 【Win10开发】关于AutoSuggestBox
其实看名字我们就知道,这个控件可以提供一些建议文本.我们在做搜索框时可以做一些文本来让用户选择. 这个控件有两个关键的事件QuerySubmitted和SuggestionChosen事件,当下拉列表 ...
- 【T-SQL】分布抽取部分数据
好吧,我确实不知道该怎么起这个标题,整了一个“分布”,感觉还有点高档,其实没啥技术含量,看完你就知道了.情况是这样,刚刚接到一个临时任务,需要让几个营业点的销售数据[变]少一点,就是在ERP的相关报表 ...
- C# 常用加密解密帮助类
public static class EncryptUtil { #region MD5加密 /// <summary> /// MD5加密 /// </summary> p ...