2

我正在尝试从 oracle db 中检索 xml,然后尝试将相同的 xml 插入到 Oracle 数据库的不同表中。通过 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

2

您应该联系您的 DBA 和/或 Oracle 支持代表。根据有关此 ORA-00600 错误的文档,这实际上是 Oracle 本身的内部问题。

来源:http ://www.orafaq.com/wiki/ORA-00600

于 2013-08-29T13:43:21.807 回答
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 回答
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);

我相信 clob 以某种方式与连接/会话相关联,这需要解决方法。如果有更好的方法,我会全力以赴。

于 2017-01-05T18:54:39.240 回答