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

场景:

.Net程序调用Oracle方法 command.ExecuteNonQuery()执行存储过程;弹出如标题异常信息。

存储过程有4个输入参数,一个输出参数。一旦执行到给输出参数赋值的时候就报错。但在Plsql环境下调度,是正常的。

分析:

查阅各帖子,都说是变量长度不够,但设置也无果。

后来,怀疑是不是设置参数顺序有问题,调整,搞定。

解决:

存储过程中定义的参数,第一个为out,虽然在设置参数时,用了参数名,但好像没起什么作用。所以,把输出参数第一个设置,与定义顺序一致,就OK了。

另外:输出参数长度是必须指定的。这里,我是通过给定一个无意义的初始值(做占位符用)。

//定义输出参数

Dictionary<string, object> dicOut = new Dictionary<string, object>();
dicOut.Add("djdh", "11111111111111111111");

定义存储过程:

CREATE OR REPLACE PROCEDURE gendh(djdh OUT VARCHAR2,
djlx IN VARCHAR2,
rq IN VARCHAR2,
dwdm IN VARCHAR2,
csfs IN VARCHAR2) IS……

后台服务中的存储过程方法定义:

// 设置输出参数
foreach (KeyValuePair<string, object> kvp in dicParaOut)
{
command.Parameters.Add(kvp.Key, OracleDbType.Varchar2, kvp.Value.ToString().Length).Direction = ParameterDirection.Output;
}

//设置输入参数

foreach (KeyValuePair<string, object> kvp in dicIn)
{
command.Parameters.Add(kvp.Key, OracleDbType.Varchar2, kvp.Value, ParameterDirection.Input);
}

时间: 2024-10-06 22:24:44

也谈Oracle异常: ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小的相关文章

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

1.今天写的存储过程在执行过程中,报如下错误. exec PRO_T_008pro_update_add_delete(17,1,1,1,1,45.0,54.0,45.0,45.0,45.0,54.0,45.0,54.0,'生产厂家','CYB10-2',54.0,45.0,25.0,1.0,45.0,25.0,1.0,45.0,25.0,1.0,45.0,1,4545.0,0,0,0,'no'); begin PRO_T_008pro_update_add_delete(17,1,1,1,1,

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

plsql报错: 处理办法(修改buffer Size大一点):

Oracle数据库之开发PL/SQL子程序和包

Oracle数据库之开发PL/SQL子程序和包 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据库中,以便共享. 过程和函数均存储在数据库中,并通过参数与其调用者交换信息.过程和函数的唯一区别是函数总向调用者返回数据,而过程不返回数据. 1. 存储过程概念 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中.经过第一次编译后

ORACLE数据库笔记之PL/SQL

PL/SQL PL/SQL是一种块结构的语言,它是将一组语句放在一个块中,一次性发送给服务器.它是结合Oracle过程语言和结构化查询语言的一种扩展语言 PL/SQL代码块的构成 declare --标记声明部分用来声明一些变量,位于begin之前 begin  --主程序体开始的标志 主程序体块: [exception when 异常名 then 异常处理的方法; when 异常名  then 异常处理的方法; ... when other then 异常处理的方法;] end;  --主程序

Oracle学习(十一):PL/SQL

1.知识点:可以对照下面的录屏进行阅读 PL/SQL程序结构 declare 说明部分 (变量说明,光标申明,例外说明 ] begin 语句序列 (DML语句]- exception 例外处理语句 End; / ------------------------------------------------------------------ --第一个PL/SQL程序:HelloWorld set serveroutput on --如果要在屏幕上输出信息,需要将serveroutput开关打

使用CLOB抛出数字或值错误异常

今天在调试某个问题的时候,由于使用了很多循环,我需要都打印出来,试图使用clob整体处理之后再打印. 最后抛出此异常:数字或值错误. 网友解释如下: $ oerr ora 650206502, 00000, "PL/SQL: numeric or value error%s"// *Cause: An arithmetic, numeric, string, conversion, or constraint error// occurred. For example, this er

[Oracle系列整理01]PL/SQL 基本查询与排序

本课重点:    1.写SELECT语句进行数据库查询    2.进行数学运算    3.处理空值    4.使用别名ALIASES    5.连接列    6.在SQL PLUS中编辑缓冲,修改SQL SCRIPTS    7.ORDER BY进行排序输出.    8.使用WHERE 字段. 一.写SQL 命令:      不区分大小写.      SQL 语句用数字分行,在SQL PLUS中被称为缓冲区.      最后以:或 / 结束语句.      也可以用RUN来执行语句 二.例1:

oracle 学习笔记之PL/SQL程序设计

1.PL/SQL的定义: PL/SQL(Procedure Language/SQL) PLSQL是Oracle对sql语言的过程化扩展 指在SQL命令语言中增加了过程处理语句(如分支.循环等),使SQL语言具有过程处理能力. 把SQL语言的数据操纵能力与过程语言的数据处理能力结合起来,使得PLSQL面向过程但比过程语言简单.高效.灵活和实用. Plsql(oracle),Transact-sql(SQL server) 2.入门程序-->打印hello world; set serverout

不安装oracle客户端也可以使用pl/sql developer

通常情况下,用PL/SQL Developer连接Oracle是需要安装Oracle客户端软件的,这也就意味着你的硬盘将被占用大约1G-2G的空间,对于Windows操作系统来说,你还会多出一些开机自启动的服务.当然对于大部分人来说,并不会在自己的机器上应用所创建的数据库,而只是希望通过他的一些配置来连接访问服务器上的数据库. 其实Oracle为我们提供了轻便的工具Oracle Instantclient package,也有人称他为“Oracle即时客户端”.使用此工具,我们就可以在不安装Or