今天遇到一个错误提示: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的更多相关文章

  1. PL/SQL: numeric or value error: character to number conversion error

    在最简单的plsql块编程中出现这个错误,是因为 DBMS_OUTPUT.PUT_LINE('the x is '+x);这里面不能用“+”,而是要用“||” DECLARE x number; ; ...

  2. PL/SQL异常处理

    As we all known,程序的错误一般分为两类:编译错误和运行时错误.其中运行时错误被称为异常.PL/SQL语句块中处理异常的部分即为异常处理部分.在异常处理部分,可以指定当特定异常发生时所采 ...

  3. PL/SQL EXCEPTION捕获抛出异常

    EXCEPTION抛出异常 处理除数为零异常 declare varA number; begin varA:=10/0; dbms_output.put_line('IT WILL NOT WORK ...

  4. 全面对比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) ...

  5. 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 ...

  6. Oracle 的PL/SQL语言使用

    --PL/SQL语言(procedure language 过程化语言) --1.声明类型 declare k number; m ; --Character String buffer too sm ...

  7. PL/SQL 用户自定义子类型

    子类型具有与其基本类型相同的操作,但只有基本类型有效值的子集. 例如,PL/SQL预先定义子类型CHARACTER和INTEGER,如下所示: SUBTYPE CHARACTER IS CHAR; S ...

  8. PL/SQL Developer 与tnsnames.ora

    PL/SQL Developer 是一款流行的oracle开发与管理的IDE. 在登录PL/SQL Developer时所选择的数据库依赖于tnsnames.ora文件中的信息. 如果我们安装了多个o ...

  9. PLSQL Developer概念学习系列之登录连接Oracle时出现(没有登录) -PL / SQL Developer:ORA - 12541: TNS :无建听程序的错误解决办法(图文详解)

    不多说,直接上干货! 前期博客 PLSQL Developer概念学习系列之如何正确登录连接上Oracle(图文详解)   如用scott.scott_password进行登录,orcl是全局数据库 ...

随机推荐

  1. Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)中一些知识点

    Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Flume官方文档翻译--Flume 1.7.0 User Guide (unr ...

  2. “英雄之旅”见闻和小结----angular2系列(三)

    前言: 本系列在前面两篇文章,介绍了Zone.js和angular2的基础概念.而后对于ng2的学习,还是由官方的 Tour of Heroes 开始. 以下内容经过提炼和个人理解,当然也会有不正确的 ...

  3. 异步Promise实现

    简介 异步回调的书写往往打乱了正常流的书写方式,在ECMAScript 6中实现了标准的Promise API,旨在 解决控制回调流程的问题. 简单的实现了Promise API: (function ...

  4. JS实现-页面数据无限加载

    在手机端浏览网页时,经常使用一个功能,当我们浏览京东或者淘宝时,页面滑动到底部,我们看到数据自动加载到列表.之前并不知道这些功能是怎么实现的,于是自己在PC浏览器上模拟实现这样的功能.先看看浏览效果: ...

  5. Javascript进阶之路-论对象的重要性

    要了解JavaScript对象,我们可以从对象创建.属性操作.对象方法这几个方面入手.概括起来,包括以下几模块: 1.创建对象        1.1 对象直接量        1.2 通过new创建对 ...

  6. git学习之branch分支

    作为新手,站在我的角度肤浅的来理解,分支就是相当于开辟了一个新的临时工作区,在这个工作区进行文件代码改动,然后在合并到master主工作区,这样能保证主工作区的安全性和稳定性,对于团队协作尤为重要. ...

  7. LINQ to SQL语句(13)之开放式并发控制和事务

    Simultaneous Changes开放式并发控制 下表介绍 LINQ to SQL 文档中涉及开放式并发的术语: 术语 说明 并发 两个或更多用户同时尝试更新同一数据库行的情形. 并发冲突 两个 ...

  8. IE6 IE7 ‘JSON’ 未定义

    今天在调试javascript程序,在FireFox和Chrome没有问题,但是在IE中,一些可以,就会出现如标题的错误:‘JSON’ 未定义: 在IE6,IE7一定有此错误,以及IE能设置兼容性视图 ...

  9. error when loading the sdk error parsing

    Error Parsing: C:\android-sdk_r24.2-windows\android-sdk-windows\system-images\android-22\android-wea ...

  10. struts2的action是多例,servlet是单例

    struts2中action是多例的,即一个session产生一个action如果是单例的话,若出现两个用户都修改一个对象的属性值,则会因为用户修改时间不同,两个用户访问得到的 属性不一样,操作得出的 ...