2016-10-03 64 views
0

我已經下面的存儲過程:PL/SQL:數字或值錯誤:字符串緩衝區太小 - 應用遠程公佈

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: numeric or value error: character string buffer too >small\nORA-06512: at \"TEST_REQUEST \"

我不知道可能會導致異常。輸出參數的大小設置得相當高,我檢查ODAC驅動程序,一切都看起來不錯。有任何想法嗎?

+0

是否與outHTML工作:= ''?或outHTML:='1'? – jva

+0

它不起作用。 – grape

回答

0

您可以查找這3種解決方案。

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

SQL > set serveroutput on buffer 2560000 

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

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

SQL>

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

DECLARE * ERROR at line 1: ORA-06502: PL/SQL: numeric or value error: character string buffer too small ORA-06512: at line 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') 
           * 

ERROR at line 1: ORA-01401: inserted value too large for column

相關問題