ORA-01795解決方法

nayi_224發表於2018-06-01

a in ('1', '2', '3')
動態拼接的sql中,in的資料超過1000報錯。
解決方法:

1.改寫為a in ('1', '2') or a in ('3') 的形式

參考程式碼

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(installLongInSql("aa", new ArrayList(Arrays.asList("1", "2", "3", "11", "2", "2", "2", "1"))));
    }

    public static String installLongInSql(String col, List<String> inList){
        if(inList == null || inList.size() == 0 || col == null || col.length() == 0)
            return "";

        StringBuffer sb = new StringBuffer(" " + col + " in (");

        int len = 5;
        int i = 0;
        for(; i < inList.size(); i++){
            if(i % len == 0 && i != 0)
                sb.append(" or " + col + " in (");
            sb.append("'" + inList.get(i) + "',");
            if(i % len == len - 1)
                sb.deleteCharAt(sb.length() - 1).append(")");
        }
        if(i % len != len - 1)
            sb.deleteCharAt(sb.length() - 1).append(")");

        return sb.toString();
    }

2.在條件允許的情況下,建立臨時表

拼接結果示例

create table temp_1800601001 as
select '1' a from dual union all
select '1' a from dual union all
select '1' a from dual union all
select '1' a from dual 

之後用臨時表做表關聯。

3.對整條語句進行拆分。

不看好,不建議。
select還能湊合。insert,update,delete可能會有業務邏輯,資料庫事務,甚至死鎖的問題。create直接沒法做。

結論:建議用1.

相關文章