簡體   English   中英

PL/SQL:數字或值錯誤:字符串緩沖區太小 - 應用程序遠程發布

[英]PL/SQL: numeric or value error: character string buffer too small - app remotely published

我有以下存儲過程:

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();
   }

當我在本地主機上運行它時一切正常,但是一旦遠程發布應用程序,我收到以下錯誤:

ORA-06502: PL/SQL: 數字或值錯誤: 字符串緩沖區太小\\nORA-06512: 在 \\"TEST_REQUEST \\"

我不知道什么可能導致異常。 out 參數的大小設置得相當高,我檢查了 ODAC 驅動程序,一切正常。 有什么想法嗎?

您可以尋找這 3 個解決方案。

1) 在運行腳本之前嘗試設置緩沖區大小。

SQL > set serveroutput on buffer 2560000

2)否則檢查您正在處理的數據。 似乎有一些字符串數據沒有正確引用,因此它正在崩潰。

3)或者可能是尺寸問題。 見下面的代碼。

查詢>

DECLARE
  2     v_test VARCHAR2(1);
  3  BEGIN
  4     v_test := 'bananas';
  5  END;
  6  /

DECLARE * ERROR 在第 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:插入的值對於列來說太大

試試這個:

OracleParameter outHtml = command.Parameters.Add("outHTML", OracleDbType.Varchar2, 32767).Direction = ParameterDirection.Output;

希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM