天天看點

Oracle Sql語句長度限制問題及解決

      最近在寫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語句。

來源:http://www.cnblogs.com/ivan-yan/archive/2009/05/30/1492042.html