PL / SQL:数字或值错误:字符串缓冲区太小 - 应用程序远程发布

时间:2016-10-03 17:30:46

标签: c# oracle

我有以下存储过程:

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驱动程序,一切看起来都不错。有什么想法吗?

2 个答案:

答案 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;

希望这会有所帮助!