这个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. 并发MD5计算方法

    MD5与SHA算法一样,利用他们可以计算某段数据的唯一hash值,常用做校验码.而MD5比SHA算法性能高.在我参加的一个项目中,主要用MD5码值来去重,因此对计算性能要求较高.网上有对MD5算法并行 ...

  2. oracle 排序

    1.ORDER BY 中关于NULL的处理 缺省处理,Oracle在Order by 时认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最前. 当然,你也可以使用nulls f ...

  3. Android 自学之滚动视图ScrollView

    滚动视图ScrollView由FarmeLayout派生而出,他就是一个用于为普通组件添加垂直滚动条的组件:ScrollView里面最多包含一个组件,而ScrollView的作用就是为该组件添加一个垂 ...

  4. 【VMware虚拟化解决方案】设计和配置VMware vCenter 5.5

    在这之前,我们已经对VMware ESXi 5.5进行了整个环境的设计和规划,虽然安装VMware ESXi 5.5在CPU的选型.网络的设计.共享存储的方式.虚拟化资源的需求和安装ESXI的模式等一 ...

  5. poj 2186 强连通分支 和 spfa

    思路: 建图时,分别建正向图edge和转置图T.用正向图edge来DFS,找出第一个被发现的强连通分支(如果该图存在题目要求的点,那么一定就是第一个被发现的).然后用spfa跑转置图T,判断被发现的点 ...

  6. New MVC World

    Note: /Controllers:controllers respond to input from the browser,decide what to do with it,and retur ...

  7. ZooKeeper(3.4.5) - 配置伪集群模式

    1. 准备 Java 运行环境,需要安装 Java1.6 或更高版本的 JDK. 2. 下载 ZooKeeper 的稳定版本 zookeeper-x.x.x.tar.gz,将其解压,约定目录名称为 % ...

  8. Android代码内存优化建议-OnTrimMemory优化

    原文  http://androidperformance.com/2015/07/20/Android代码内存优化建议-OnTrimMemory优化/ OnTrimMemory 回调是 Androi ...

  9. Fragment 整个生命周期

      时间 2014-05-21 17:09:53 CSDN博客原文 http://blog.csdn.net/linfeng24/article/details/26491407 Fragment 生 ...

  10. Java之绘制实例

    前面已经介绍过绘制方法. 弧形的绘制: package com.caiduping; import java.awt.Graphics; import javax.swing.JFrame; impo ...