2017-03-09 76 views
0

我有我給當我嘗試執行我查詢以下錯誤:Oracle.DataAccess.Client.OracleException ORA-06502:PL/SQL:數字或值錯誤:字符串緩衝區太小。錯誤在的ExecuteReader步

Oracle.DataAccess.Client.OracleException ORA-06502: PL/SQL: numeric or value error: character string buffer too small

的一塊會拋出異常的代碼如下所示:

OracleConnection ocnn = (OracleConnection)this.Session.Connection; 

using (OracleCommand command = ocnn.CreateCommand()) 
      { 
       string getFieldValuesQuery = 
        "SELECT FIELD_NAME" 
        + "FROM FIELD_VALUES WHERE FIELD_GUID in (select ID from table(f_parse_as_table(:fieldIds)) tab) " 
        + "AND DOCUMENT_GUID in (select ID from table(f_parse_as_table(:documentIds)) tab) " 
        + "AND RESOURCE_STATUS != 'DEL' "; 

       // value is a string which have 55 characters lenght 
       if (value != null) 
       { 
        getFieldValuesQuery += "AND TEXT_VALUE in (select ID from table(f_parse_as_table(:valuesIn)) tab) "; 
       } 

       command.CommandText = getFieldValuesQuery; 
       command.BindByName = true; 

       OracleParameter fieldIdParameter = new OracleParameter(); 
       OracleParameter documentIdParameter = new OracleParameter(); 
       //OracleParameter valuesInParameter = new OracleParameter(); 
       OracleParameter valuesInParameter = new OracleParameter("valuesIn", OracleDbType.Varchar2, 2000, ParameterDirection.Input); 


        fieldIdParameter.ParameterName = "fieldIds"; 
        fieldIdParameter.OracleDbType = OracleDbType.Clob; 
        fieldIdParameter.Direction = ParameterDirection.Input; 
        fieldIdParameter.Value = string.Join(",", fieldIds); 

        documentIdParameter.ParameterName = "documentIds"; 
        documentIdParameter.OracleDbType = OracleDbType.Clob; 
        documentIdParameter.Direction = ParameterDirection.Input; 
        documentIdParameter.Value = string.Join(",", documentIds); 

        command.Parameters.Add(fieldIdParameter); 
        command.Parameters.Add(documentIdParameter); 

        if (value != null) 
        { 
         //valuesInParameter.ParameterName = "valuesIn"; 
         //valuesInParameter.OracleDbType = OracleDbType.Varchar2; 
         //valuesInParameter.Direction = ParameterDirection.Input; 
         valuesInParameter.Value = string.Join(",", value); 

         command.Parameters.Add(value); 
        } 

        returnList = this.ExecuteReader(command); 
       } 

我知道在這裏提出了類似的答案,但他們並沒有幫助我。根據this問題我設置了oracle參數的長度。

如果value的長度小於或等於50個字符,所有工作正常。我不知道這個限制出現在哪裏。這很奇怪,因爲我提供的在表格定義中有VARCHAR2類型,長度爲2000個字符。

調用ExecuteReader方法時拋出錯誤。

+1

您正在調用名爲f_parse_as_table()的數據庫中的函數。我將猜測這個函數需要VARCHAR2(50),這就是爲什麼當參數小於或等於50個字符時它可以工作。 – unleashed

+0

@unleashed你可以寫它作爲答案。它幫助了我。 –

+0

複製評論作爲答案。祝你好運! – unleashed

回答

1

您正在調用名爲f_parse_as_table()的數據庫中的函數。我將猜測這個函數需要VARCHAR2(50),這就是爲什麼當參數小於或等於50個字符時它可以工作。

相關問題