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型字段了。

猜你喜欢

转载自blog.csdn.net/wojiaohb/article/details/83624220