2

Oracle db から thexml を取得しようとしていて、同じ xml を Oracle Database の別のテーブルに挿入しようとしています。clob による選択は正常に機能していますが、更新中にエラーがスローされます。

java.sql.Clob myClob = null;
connect = DriverManager.getConnection(str2, str3, str4);
String sql = "select xml from table1 where id='3|32'";
stmt = connect.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
    myClob = rs.getClob("XML"); // This part is working fine.


    //Updation


    connect1 = DriverManager.getConnection(str22, str33, str44);
    String query1 = "update documentsout set xml = ?   " +
        "where  id = ? ";
    stmt1 = connect1.prepareStatement(query1);
    stmt1.setString(1, myClob); // Inserting the same CLOB
    stmt1.setString(2, id);
    stmt1.executeUpdate();      // ERROR HERE

エラーは

java.sql.SQLException: ORA-00600: internal error code, arguments: [kglgtbo1], [0x700000482AA4608], [], [], [], [], [], [], [], [], [], []

助けていただけますか?

4

4 に答える 4

0

これには制限があるかもしれませんが、私の状況ではうまくいきました。以下srcValueは、ソース (src) から読み取られた値で、これは clob フィールドであり、stmt使用している準備済みステートメント (私の場合は挿入) です。ターゲット (tgt) も clob フィールドです。

        Clob srcClob = (Clob)srcValue;
        Clob tgtClob = stmt.getConnection().createClob();
        tgtClob.setString(1, srcClob.getSubString(1, (int)srcClob.length()));
        stmt.setClob(icol, tgtClob);

私は、クロブが何らかの方法で接続/セッションに関連付けられていると信じています。これには回避策が必要です。もっと良い方法があれば、私はすべての耳です。

于 2017-01-05T18:54:39.240 に答える
0

これを使って

stmt.setClob(position, clob);

それ以外の

 stmt1.setString(1, myClob);
于 2013-08-29T13:46:13.473 に答える
0

setClob メソッドを使用する必要があります

  // get clob
  java.sql.Clob clob = (java.sql.Clob) rs.getObject(1);

  // set clob
  String query = "insert into clob_table(id, clob_column) values(?, ?)";
  pstmt = conn.prepareStatement(query);
  pstmt.setString(1, newID);
  pstmt.setClob(2, clob);
于 2013-08-29T13:46:42.610 に答える