这个BUG出现会报错如下:

selectto_char(max(RENEWAL_DATE)) intoM_YEAR_MONTH fromt_renewal_schedule;

ORA-06502: PL/SQL:数字或值错误: 字符串缓冲区太小

这个时候有3个方法可以解决

1、setting initialisation parameter BLANK_TRIMMING=TRUE

2、declare PL/SQL CHAR and VARCHAR2 variable used in the INTO clause of SELECT statement as 4,000 bytes.

3、Use CAST SQL function to constraint the size to that of the variable size like

SELECT CAST(MIN('Y') AS CHAR(1)) INTO C FROM DUAL;

CAST是强制转换函数。

参数BLANK_TRIMMING设置为TRUE的时候可以解决我们的BUG问题,同时这个参数设置为TRUE会在进行变量的赋值的时候忽略末尾的空格,同时这个参数必须关闭数据库进行更改。所以请评估下,是否可行。

试验如下:

SQL> CREATE TABLE abc (

2  cont_no char(8),

3  plan_id char(7));

Table created

SQL> INSERT INTO abc VALUES ('123456  ', '7654321');   ---(这里空格有2位)

1 row inserted

SQL> commit;

SQL> DECLARE

2     c_Plan_ID char(6);

3  BEGIN

4     SELECT cont_no INTO c_Plan_ID from abc;

5     dbms_output.put_line(c_Plan_ID);

6  END;

7  /

DECLARE

c_Plan_ID char(6);

BEGIN

SELECT cont_no INTO c_Plan_ID from abc;

dbms_output.put_line(c_Plan_ID);

END;

ORA-06502: PL/SQL:数字或值错误: 字符串缓冲区太小

ORA-06512:在line 5

然后我们修改参数BLANK_TRIMMING为true

alter system set BLANK_TRIMMING=true scope=spfile;

重启数据库进行测试

进行测试

SQL>  DECLARE

2         c_Plan_ID char(6);

3      BEGIN

4         SELECT cont_no INTO c_Plan_ID from abc;

5         dbms_output.put_line(c_Plan_ID);

6      END;

7  /

123456

PL/SQL procedure successfully completed

看到可以完成了

下面是METALINK的原话

SELECT containing a MIN or MAX into a CHAR variable inside a PL/SQL block Fails With ORA-06502 [ID 311653.1]

Applies to:

Oracle Server -EnterpriseEdition - Version:10.1.0.4 to 10.1.0.4

Oracle Server -EnterpriseEdition - Version:9.2.0.6 to 9.2.0.7

Oracle Server -EnterpriseEdition - Version:10.2.0.1 to 10.2.0.1

This problem can occur on any platform.

Symptoms

SELECT containing a MIN or MAX into a CHAR variable inside a PL/SQL block Fails With:

ORA-06502: PL/SQL: numeric or value error: character string buffer too small

Example:

DECLAREC CHAR(1);BEGINSELECT MIN('Y') INTO C FROM dual;END;/DECLARE*ERROR at line 1:ORA-06502: PL/SQL: numeric or value error: character string buffer too smallORA-06512: at line 4Changes

After upgrading to Oracle10gR210.2.0.1

After applying10.1.0.4 patchset

After applying9.2.0.6 patchset

After applying9.2.0.7 patchset

Cause

This problem has been identified as

Bug:4458790 ORA-6502 selecting MAX/MIN into a CHAR variable in PLSQL

This problem is introduced in Oracle9i9.2.0.6, Oracle10g10.1.0.4 and 10.2.0.1 by the fix for Bug:3499258.

A PLSQL block which SELECTs a MAX or MIN into a fixed CHAR variable can fail with an unexpected ORA-6502 "character string buffer too small" error.

Solution

This problem is fixed in

Oracle9iR2 (9.2.0.8, terminal patchset)

Oracle11gR1(11.1.0.x or higher)

Oracle10gR1(10.1.0.5 or higher)

Oracle10gR2 (10.2.0.2 or higher)

Workarounds:

setting initialisation parameter BLANK_TRIMMING=TRUE

declare PL/SQL CHAR and VARCHAR2 variable used in the INTO clause of SELECT statement as 4,000 bytes.

Use CAST SQL function to constraint the size to that of the variable size like

SELECT CAST(MIN('Y') AS CHAR(1)) INTO C FROM DUAL;

Oracle bug 使用max或min函数into到一个char类型报字符缓冲区太小的错误的更多相关文章

  1. SQL中MAX()和MIN()函数的使用(比较字符串的大小)

    在SQL数据库中,最大/最小值函数—MAX()/MIN()是经常要用到的,下面就将为您分别介绍MAX()函数和MIN()函数的使用,供您参考,希望对您学习SQL数据库能有些帮助. 当需要了解一列中的最 ...

  2. Entity Framework 6 Recipes 2nd Edition(11-6)译 -> 从一个”模型定义”函数里返回一个复杂类型

    11-6.从一个”模型定义”函数里返回一个复杂类型 问题 想要从一个”模型定义”函数返回一个复杂类型 解决方案 假设我们有一个病人(patient)和他们访客(visit)的模型,如 Figure 1 ...

  3. jdk8-》allMatch、anyMatch、max、min函数

    allMatch函数: 检查是否匹配所有元素,只有全部符合才返回true boolean flag = list.stream().allMatch(obj->obj.length()>5 ...

  4. 包含MIN函数的栈+一个数组实现两个堆栈+两个数组实现MIN栈

    1.题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 思路:利用一个辅助栈来存放最小值     栈  3,4,2,5,1     辅助栈 3,2,1 每入栈一次,就与辅 ...

  5. python学习-33 max和min函数的高级使用

    1.简单比较 age_dic={'age1456':15,'age2':16,'xiaohong_age':12,'xiaoming_age4':18,'age5':10} print(max(age ...

  6. 也谈Oracle异常: ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小

    场景: .Net程序调用Oracle方法 command.ExecuteNonQuery()执行存储过程;弹出如标题异常信息. 存储过程有4个输入参数,一个输出参数.一旦执行到给输出参数赋值的时候就报 ...

  7. oracle max()函数和min()函数

    当需要了解一列中的最大值时,可以使用MAX()函数:同样,当需要了解一列中的最小值时,可以使用MIN()函数.语法如下. SELECT          MAX (column_name) / MIN ...

  8. zip()函数,max()和min(),built-in function,import模块,read(),readlines(),write(),writelines(),with..as..文件处理方式

    zip()函数:将可迭代对象作为参数,将对象中的对应元素打包成一个个元组. #map()普通的输出例子 print(list(zip(('a','n','c'),(1,2,3)))) print(li ...

  9. 20包含min函数的栈

      题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数.   建一个辅助栈,把每次最小最小的元素(之前最小元素,与当前新入栈的元素比较)放在辅助栈里.   import j ...

随机推荐

  1. Linux学习之路:命令别名、历史记录和命令查找执行顺序

    一.命令别名 alias rm='rm –i':删除命令时会随时出现提示;alias vi=vim alias 不加参数,显示系统内所以命令别名 unalias 取消别名 二.历史命令 history ...

  2. 给jdk写注释系列之jdk1.6容器(10)-Stack&Vector源码解析

    前面我们已经接触过几种数据结构了,有数组.链表.Hash表.红黑树(二叉查询树),今天再来看另外一种数据结构:栈.      什么是栈呢,我就不找它具体的定义了,直接举个例子,栈就相当于一个很窄的木桶 ...

  3. zabbix电话告警V1

    最近决定将夜班值班人员取消,夜里告警采用机器人电话通知.总结一下这么几个情况,有问题还请指出,希望也能给大家多一个思路. V1做的太糙了,预计年初上V2 一.用谁家的服务 费用我没有太关注,主要就是看 ...

  4. [未完成]WebService学习第一天学习笔记

    [未完成]WebService学习第一天学习笔记[未完成]WebService学习第一天学习笔记

  5. Nginx+FastCGI+C

    http://flandycheng.blog.51cto.com/855176/858946 http://www.cnblogs.com/xiaouisme/archive/2012/08/01/ ...

  6. JAVA基础之理解JNI原理

    JNI是JAVA标准平台中的一个重要功能,它弥补了JAVA的与平台无关这一重大优点的不足,在JAVA实现跨平台的同时,也能与其它语言(如C.C++)的动态库进行交互,给其它语言发挥优势的机会. 有了J ...

  7. 转: OpenResty最佳实践

    https://moonbingbing.gitbooks.io/openresty-best-practices/content/ centOS安装另加内容 ln -sf luajit-2.1.0- ...

  8. unity3d鼠标经过物体时变颜色,离开时恢复

    using UnityEngine; using System.Collections; public class MouseEvent_Color : MonoBehaviour { //物体初始颜 ...

  9. Java加密解密相关

    关于解释加密解密中的填充方案: http://laokaddk.blog.51cto.com/368606/461279/ 关于对称加密中的反馈模式: http://blog.csdn.net/aaa ...

  10. 转:SqlServer2008误操作数据(delete或者update)后恢复数据

    Sqlserver2008误操作数据(delete或者update)后恢复数据(转) 实际工作中,有时会直接在数据库中操作数据,比如对数据进行delete或者update操作,当进行这些操作的时候,如 ...