日期:2014-05-18  浏览次数:20947 次

读很长的XMLTYPE字段中的内容,出错?
我想从oracle的XMLTYPE字段中读数据,使用select x.xmldata.extract('*').getstringVal() as xmltxt from mytable x where ....,当XMLTYPE字段内容不多时,没问题,但有时候出错:
ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
ORA-06512: 在"SYS.XMLTYPE",Line 163.
我使用的是.net中的oraclecommand方法,也没写PL/SQL,我不知如何修改缓冲区大小,我该怎么办?


------解决方案--------------------
在.NET中执行ORACLE存储过程的函数时(有返回值)报错:ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小

解决办法:存储过程的参数添加得按特定顺序,第1个参数为函数的返回值,第2个参数为函数中的第一个参数,以些类推。 把顺序打乱了,通常会报告如上错误,当然也不是都报,但运行结果不对。

代码如下:
OracleCommand com = new OracleCommand("pk_wt.f_get",con);
com.CommandType = CommandType.StoredProcedure;
OracleParameter oPram = new OracleParameter("str_",OracleDbType.Varchar2,8000);
oPram.Direction = ParameterDirection.InputOutput;
oPram.Value = "我是.NET程序中输入的字符型参数值。";
OracleParameter oPram2 = new OracleParameter("result_", OracleDbType.Varchar2,8000);
oPram2.Direction = ParameterDirection.ReturnValue;

oPram2.Value = "我是.NET程序中预设的ORACLE存储过程(函数)返回值。";//这一行代码纯属示例,实际中根本没有此必要

com.Parameters.Add(oPram2);//装返回值的参数要第1个添加
com.Parameters.Add(oPram);
com.ExecuteNonQuery();