ORA——00600錯誤的原因是:(Oracle中對clob型別欄位的操作)
阿新 • • 發佈:2018-11-05
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型欄位了。