0

文字列メッセージを文字の長さに応じて 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();
                }
            }
        }
4

2 に答える 2

0

一般的な文字列スプリッターは次のとおりです。

private IEnumerable<string> SplitString(string incomingString, int numberToCut)
    {
        int nombreDeCaractere = incomingString.Length;
        List<string> result = new List<string>();
        string temp = string.Empty;
        int curseur = 0;
        do
        {
            for (int i = 0; i < numberToCut - 1; i++)
            {
                temp += incomingString.Substring(i + curseur, 1);
            }

            result.Add(temp);
            temp = string.Empty;
            curseur += numberToCut;
        } while (nombreDeCaractere >= curseur + numberToCut);

        temp = string.Empty;
        for (int i = curseur; i < nombreDeCaractere; i++)
        {
            temp += incomingString.Substring(i, 1);
        }

        result.Add(temp);

        return result;
    }
于 2013-11-13T16:42:56.927 に答える