ORA-01461: can bind a LONG value only for insert into a LONG column-Occurs when querying

前端 未结 15 1799
野的像风
野的像风 2020-11-30 02:44

When I try to query objects, I end up with following error:

ORA-01461: can bind a LONG value only for insert into a LONG column

Could someo

15条回答
  •  醉酒成梦
    2020-11-30 03:27

    I have a solution for Java/JPA/eclipselink/oracle when insert a long xml string (>4000) into a XMLTYPE column at Insert XML with more than 4000 characters into a Oracle XMLTYPE column. For clarity, include the same contents here in case the link not working

    You need to convert xml string for more than 4000 charcaters into SQLXML type first.

    Environment: jpa 2.1.0, eclipselink 2.5.2, oracle db 11gr2

    SQL:

    CREATE TABLE "XMLTEST"
    ( "ID" NUMBER(10,0) NOT NULL ENABLE, 
      "DESCRIPTION" VARCHAR2(50 CHAR) NOT NULL ENABLE, 
      "XML_TXT" "XMLTYPE" NOT NULL ENABLE
    );
    
    INSERT INTO XMLTEST (ID, DESCRIPTION, XML_TXT) VALUES (101, 'XML DATA', 'TEST');
    COMMIT;
    
    DROP TABLE "XMLTEST";
    

    Java Code

    String sql = "INSERT INTO XMLTEST (ID, DESCRIPTION, XML_TXT) VALUES (?, ?, ?)";
    String xmlDataStr = "test..."; // a long xml string with length > 4000 characters
    Connection con = getEntityManager().unwrap(Connection.class);
    SQLXML sqlXml = con.createSQLXML();
    sqlXml.setString(xmlDataStr);
    

    Java code - use PreparedStatement

    PreparedStatement pstmt = con.prepareStatement(sql);
    pstmt.setLong(1, 201);
    pstmt.setLong(2, "Long XML Data");
    pstmt.setSQLXML(3, sqlXml);
    pstmt.execute();
    

    Java code - use native query instead of PreparedStatement

    Query query = getEntityManager().createNativeQuery(sql);
    query.setParameter(1, 301);
    query.setParameter(2, "Long XML Data");
    query.setParameter(3, sqlXml);
    query.executeUpdate();
    

提交回复
热议问题