1. 程式人生 > >ORA——00600錯誤的原因是:(Oracle中對clob型別欄位的操作)

ORA——00600錯誤的原因是:(Oracle中對clob型別欄位的操作)

ORA——00600錯誤的原因是:(Oracle中對clob型別欄位的操作)

在這裡插入圖片描述
改正的程式碼如下:
//3.2生成資料插入語句 (增加的方式)
StringBuilder insertSql = new StringBuilder(“INSERT INTO “);
insertSql.append(tableName);
insertSql.append(” ( “);
StringBuilder paramSql = new StringBuilder(” values (”);

        for(int i = 0 ; i < colList.size() ; i++){
            if(i<(colList.size()-1)){
                if(colList.get(i).toUpperCase().equals("ACCEPTLIST")){
                    insertSql.append(colList.get(i));
                    insertSql.append(",");
                    paramSql.append("empty_clob()");
                    paramSql.append(",");
                }else{
                    insertSql.append(colList.get(i));
                    insertSql.append(",");
                    paramSql.append("?");
                    paramSql.append(",");
                }
            }else{
                if(colList.get(i).toUpperCase().equals("ACCEPTLIST")){
                    insertSql.append(colList.get(i));
                    insertSql.append(")");
                    paramSql.append("empty_clob()");
                    paramSql.append(")");
                }else{
                    insertSql.append(colList.get(i));
                    insertSql.append(")");
                    paramSql.append("?");
                    paramSql.append(")");
                }
            }
        }
       ——————————————————————————————————————————————————————————

這個是別人的解釋,我覺得概括的完全正確我就拿過來了:
第一,LOB資料不能象其它型別資料一樣直接插入(INSERT)。插入前必須先插入一個空的LOB物件,CLOB型別的空物件為EMPTY_CLOB(),BLOB型別的空物件為EMPTY_BLOB()。之後通過SELECT命令查詢得到先前插入的記錄並鎖定,繼而將空物件修改為所要插入的LOB物件。
第二,在插入到更新之間一定要將自動提交設為false否則,再次查詢時就不能正確更新,查詢時一定要用select XXX from table where id=‘XXX’ for update 如果不加for update會報:“row containing the LOB value is not locked”;如果在插入前沒有將自動提交設為false會報“fetch out of sequence ”。注意到以上兩點一般就可以順利插入clob型欄位了。