狼人
          走在SCJP的路上
          posts - 12,  comments - 14,  trackbacks - 0
          摘自:http://www.cnblogs.com/ivan-yan/archive/2009/05/30/1492042.html
          作者:Ivan-Yan



          最近在寫Sql語句時,碰到兩個問題:
                1)ORA-01795: maximum number of expressions in a list is 1000      
                起因:寫出了這樣的sql語句:SELECT PALLET_ID,BOX_ID,STATUS FROM SD_CURRENT_BOX WHERE PALLET_ID IN('"+pallets+"');其中的pallets是有很多個pallet_id組合成的字符串。
                分析:很顯然,根據錯誤提示可以知道:in 中items的限制 1000個。
                解決:用子查詢來代替pallets長字串。

                2)ORA-01704: string literal too long
                起因:寫出了這樣的Sql語句:UPDATE PDM_MEMBERLIST SET MEMBERS='<Project> ...  此處略去n多串 <ProjectID>'.
                分析:數據庫設計MEMBERS字段為xmltype格式,數據存儲時候,是以字符串的形式存儲。這樣在xml數據量大的時候,造成sql語句過長,嘗過2k的限制。
                解決:參數化sql語句。


          -----------------------------------------------------------------------------------------------------------------------

          #1樓   回復  引用  查看    

          ORA-01795:用IN的SQL效率比較低,如果是確定的數據,比如“IN(‘value1’,'value2'……)”,用OR連接更好些,雖然看著比較長,但是效率比較高。如果用子查詢,IN的效率也不如Exists。

          Ivan-Yan

          posted on 2009-08-03 16:48 狼人 閱讀(3017) 評論(0)  編輯  收藏 所屬分類: Oracle

          <2009年8月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 凤翔县| 蒙城县| 安远县| 陵川县| 西青区| 澄城县| 道真| 鹤山市| 楚雄市| 北流市| 河间市| 定南县| 昭平县| 江川县| 陇西县| 赤峰市| 霍州市| 龙井市| 南漳县| 太湖县| 林西县| 察隅县| 雷波县| 伊川县| 象山县| 东城区| 渭南市| 繁昌县| 青阳县| 荃湾区| 安宁市| 临猗县| 兴仁县| 无锡市| 铜梁县| 手机| 十堰市| 昭觉县| 乐东| 张家口市| 衡阳市|