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
方法時拋出錯誤。
您正在調用名爲f_parse_as_table()的數據庫中的函數。我將猜測這個函數需要VARCHAR2(50),這就是爲什麼當參數小於或等於50個字符時它可以工作。 – unleashed
@unleashed你可以寫它作爲答案。它幫助了我。 –
複製評論作爲答案。祝你好運! – unleashed