我有以下存储过程:
create or replace PROCEDURE TEST_REQUEST(
outHTML OUT VARCHAR2,
varParameters IN XMLTYPE)
IS
tmpVar NUMBER;
BEGIN
outHTML :=
'<table><tr><td>Test!</td></tr></table>';
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
-- Consider logging the error and then re-raise
RAISE;
END TEST_REQUEST;
输入参数'varParameters'=
'<test>
<testid>3DA736A8A4562E053D6</testid>
<testaction>Reject</testaction>
</test>'
当我调用上述存储过程时:
using (OracleConnection connection = new OracleConnection())
{
connection.ConnectionString = this.ConnectionString;
connection.Open();
using (OracleCommand command = new OracleCommand())
{
command.Connection = connection;
command.CommandType = CommandType.StoredProcedure;
command.BindByName = true;
command.CommandText = "TEST_OWNER.TEST_REQUEST ";
OracleParameter outHtml = command.Parameters.Add("outHTML", OracleDbType.Varchar2);
outHtml.Direction = ParameterDirection.Output;
outHtml.Size = Int16.MaxValue;
command.Parameters.Add("varParameters", OracleDbType.XmlType).Value = doc;
command.ExecuteNonQuery();
....
}
connection.Close();
}
当我在localhost上运行它时,一切正常但是一旦远程发布应用程序,我收到以下错误:
ORA-06502:PL / SQL:数字或值错误:字符串缓冲区&gt;小\ nORA-06512:at \“TEST_REQUEST \”
我不知道可能导致异常的原因。 out参数的大小设置得相当高,我检查了ODAC驱动程序,一切看起来都不错。有什么想法吗?
答案 0 :(得分:0)
您可以寻找这3种解决方案。
1)尝试在运行脚本之前设置缓冲区大小。
SQL > set serveroutput on buffer 2560000
2)否则检查您正在处理的数据。似乎有一些字符串数据没有被正确引用,因此它正在崩溃。
3)或者可能是尺寸问题。见下面的代码。SQL&GT;
DECLARE
2 v_test VARCHAR2(1);
3 BEGIN
4 v_test := 'bananas';
5 END;
6 /
DECLARE *第1行的错误:ORA-06502:PL / SQL:数字或值错误:字符串缓冲区太小ORA-06512:第4行
SQL> CREATE TABLE bananas (name VARCHAR2(1));
Table created.
SQL> INSERT INTO bananas (name) VALUES ('One banana two banana');
INSERT INTO bananas (name) VALUES ('One banana two banana')
*
第1行的错误:ORA-01401:列值
的插入值太大
答案 1 :(得分:0)
尝试一下:
OracleParameter outHtml = command.Parameters.Add("outHTML", OracleDbType.Varchar2, 32767).Direction = ParameterDirection.Output;
希望这会有所帮助!