当前位置:网站首页>ORA-06512 数字或值错误字符串缓冲区太小
ORA-06512 数字或值错误字符串缓冲区太小
2022-08-03 09:18:00 【m0_67394230】
ORA-06512 网上最容易查到的解释为
Cause
This error is caused by the stack being unwound by unhandled exceptions in your PLSQL code.
The options to resolve this Oracle error are:
- Fix the condition that is causing the unhandled error.
- Write anexception handlerfor this unhandled error.
- Contact your DBA for help.
The ORA-06512 error message indicates the line number of the unhandled error in the PLSQL code. This is quite useful when troubleshooting.
举个栗子来了解此异常
创建存储过程TestProc,参数v_number是一个长度为2的数字, 存储过程中将100赋值给v_number,执行存储过程后提示异常,ORA-06502表示发生的错误;ORA-06512表示发生的行数,本例中因为100的是3位数字,v_number只能处理2位数字
SQL> CREATE OR REPLACE PROCEDURE TestProc AS
2 v_number number(2);
3 BEGIN
4 v_number := 100;
5 END;
6 /
Procedure created
SQL> execute TestProc();
begin TestProc(); end;
ORA-06502: PL/SQL: 数字或值错误 : number precision too large
ORA-06512: 在 "BOSS643.TESTPROC", line 4
ORA-06512: 在 line 2
针对上述问题,可以重新定义数值长度解决这个问题,v_number定义为3
SQL> CREATE OR REPLACE PROCEDURE TestProc AS
2 v_number number(3);
3 BEGIN
4 v_number := 100;
5 END;
6 /
Procedure created
SQL> execute TestProc();
PL/SQL procedure successfully completed
SQL>
如果将数值型修改成其他类型后也是同样的, 例如字符串,v_str设置为处理长度为10的字符串, 当给v_str赋值大于长度10的字符串后, 提示数字或者值错误,符串缓冲区太小
SQL> CREATE OR REPLACE PROCEDURE TestProc2 AS
2 v_str varchar2(10);
3 BEGIN
4 v_str := 'This is a test string';
5 END;
6 /
Procedure created
SQL> execute TestProc2();
begin TestProc2(); end;
ORA-06502: PL/SQL: 数字或值错误 : character string buffer too small
ORA-06512: 在 "BOSS643.TESTPROC2", line 4
ORA-06512: 在 line 2
重新定义varchar2长度
SQL> CREATE OR REPLACE PROCEDURE TestProc2 AS
2 v_str varchar2(512);
3 BEGIN
4 v_str := 'This is a test string';
5 END;
6 /
Procedure created
SQL> execute TestProc2();
PL/SQL procedure successfully completed
SQL>
当然你也可以自定义异常来处理,例如当出现异常后提示“数值越界” ,此方法将异常捕获提示更加明确,个人认为ORA-06502异常已经十分清楚了, 具体还看存储过程对应的需求是否有明确提示需求
SQL> CREATE OR REPLACE PROCEDURE TestProc AS
2 v_number number(2);
3 BEGIN
4 v_number := 100;
5 EXCEPTION
6 WHEN OTHERS THEN
7 RAISE_APPLICATION_ERROR(-20001, '数值v_number越界');
8 END;
9 /
Procedure created
SQL> exec TestProc();
begin TestProc(); end;
ORA-20001: 数值v_number越界
ORA-06512: 在 "BOSS643.TESTPROC", line 7
ORA-06512: 在 line 2
相关资源:
Oracle Database Documentation - Oracle Database
PL/SQL User’s Guide and Reference – Contents
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢
110 MySQL interview questions and answers (continuous updates)
固件工程师到底是干什么?
播放量暴涨2000w+,单日狂揽24w粉,内卷的搞笑赛道还有机会
015-Balanced binary tree (1)
selenium IDE的3种下载安装方式
SAP Analytics Cloud 和 SAP Cloud for Customer 两款 SaaS 软件的集成
别人都不知道的“好用”网站,让你的效率飞快
行业 SaaS 微服务稳定性保障实战
MySQL-存储过程-函数-
STP普通生成树安全特性— bpduguard特性 + bpdufilter特性 + guard root 特性 III loopguard技术( 详解+配置)
随机推荐
长短期记忆网络 LSTM
Guava-字符串工具
xtrabackup
mysql数据库配置性能调优
The window of the chosen data flow
English Grammar - Adverbial Clauses
箭头函数与普通函数的区别
Exception: Dataset not found. Solution
MySQL的主从复制
索引(三)
Machine learning (formula derivation and code implementation)--sklearn machine learning library
关于Unity自定义Inspector面板的一些自定义编辑器扩展
Path Prefixes (倍增!树上の二分)
SQL Daily Practice (Nioke New Question Bank) - Day 5: Advanced Query
浅析什么是伪类和伪元素?伪类和伪元素的区别解析
scala 并行集合、并行并发、线程安全问题、ThreadLocal
Rabbit and Falcon are all covered, Go lang1.18 introductory and refined tutorial, from Bai Ding to Hongru, the whole platform (Sublime 4) Go lang development environment to build EP00
命令行加载特效 【cli-spinner.js】 实用教程
Flink Yarn Per Job - 创建启动Dispatcher RM JobManager
Exception: Dataset not found.解决办法