摘自:
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語句。
-----------------------------------------------------------------------------------------------------------------------
ORA-01795:用IN的SQL效率比較低,如果是確定的數據,比如“IN(‘value1’,'value2'……)”,用OR連接更好些,雖然看著比較長,但是效率比較高。如果用子查詢,IN的效率也不如Exists。
posted on 2009-08-03 16:48
狼人 閱讀(3010)
評論(0) 編輯 收藏 所屬分類:
Oracle