oracle Clob 存儲超長字符


   遇到過一些比較奇葩的需求,對應奇葩的需求,所以就產生了一些奇葩的解決方案:

 1)Sql Insert 時,字符中字符串不能含有單引號,否則就引起數據庫插入錯誤

  例:在處理一個錯誤機制時,需要保存該API請求的Url,如果該字段為字符串 insert時單引號將會報錯。

                所以用了一個比較笨的辦法,編譯,將單引號編譯成兩個單引號,使用的時候編譯回來 Url.Replace("'", "''");

    

    2)需要存儲很大數量的字符串,而字符的數據量並不受我們控制,必須是來者不拒,像varchar2 varchar 對字符存儲是有限制的,並不符合需求,只有Clob 類型可以滿足我們的需求。

  但是Clob 有一個問題就是,字符超過4000就會出現報錯,字符長度過長,雖然這個字符儲存量非常大,但是需要進行處理。

  在網上找到兩種解決方案,一種使用參數的形式來,但是我不想使用函數或者是儲存過程,一種是拼接Update,就直接淘汰掉

  使用了另外一種方法:

   :req  類似於一個占位符
string strSql = string.Empty;
            OracleConnection con = new OracleConnection(conn);
            try
            {
                if (string.IsNullOrEmpty(request))
                {
                    request = " ";
                }

                strSql = @"insert into ""TableName""(""id"",""request"")
                           values ('{0}',:req)";
                strSql = string.Format(strSql, id);

                if (con.State == ConnectionState.Closed)
                {
                    try
                    {
                        con.Open();
                    }
                    catch (Exception e)
                    {
                        throw e;
                    }
                }
                string sqlText = strSql;
                using (OracleCommand cmd = new OracleCommand(sqlText, con))
                {
                    OracleParameter oracleParameter1 = new OracleParameter("req", OracleType.Clob);
                    oracleParameter1.Value = CommonUtil.FilteSQLStr(request);
                    cmd.Parameters.Add(oracleParameter1);

                    cmd.ExecuteNonQuery();
                }

這樣就可以解決這個問題了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM