文字列メッセージを文字の長さに応じて 3 つの部分に分割する方法について質問があります。その理由は、ストアド プロシージャが 32767 文字を超えないためです。(pl/sql ペイロード) したがって、これらのメッセージを追加してキューに送信できるストアド プロシージャに 3 つのメッセージ (3 つのクロブ) を送信したいと考えています。
string message
を持っていて、メッセージの最大長が 32.000 文字になる 3 つの部分に計算する必要がある場合、どのソリューションが最適ですか?
ストアド プロシージャに必要なもの:(qname IN varchar2, i_clob1 IN clob, i_clob2 IN clob, i_clob3 IN clob)
string message
また、最初の部分が 32.000 文字未満であるが、3 部に分けて送信したい場合、3 部に分けて送信する方法を教えてください。
これは、1 つのメッセージ (i_clob) を受け取る私のコードです。
public void Enqueue(string queueName, string mess)
{
OracleCommand cmd = null;
try
{
cmd = new OracleCommand("", m_Connection)
{
CommandText = m_InSpName,
CommandType = CommandType.StoredProcedure
};
//add Aq queue name
OracleParameter qName = new OracleParameter("qname", OracleType.VarChar)
{
Direction = ParameterDirection.Input,
Value = queueName
};
//add message to enqueue
OracleParameter message = new OracleParameter("i_clob", OracleType.Clob)
{
Direction = ParameterDirection.Input
};
mess = mess.Replace("<?xml version=\"1.0\" encoding=\"utf-16\"?>", "");
message.Value = mess;
cmd.Parameters.Add(qName);
cmd.Parameters.Add(message);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
//rethrow exception and make sure we clean up i.e. execute finally below
throw new Exception("An error occurred trying to deliver the message to the queue", ex);
}
finally
{
if (cmd != null)
{
cmd.Dispose();
}
}
}