sql - Setting a Clob value in a native query -
oracle db.
spring jpa using hibernate.
i having difficulty inserting clob value native sql query. code calling query follows:
@suppresswarnings("unchecked") public list<object[]> findquerycolumnsbynativequery(string querystring, map<string, object> namedparameters) { list<object[]> result = null; final query query = em.createnativequery(querystring); if (namedparameters != null) { set<string> keys = namedparameters.keyset(); (string key : keys) { final object value = namedparameters.get(key); query.setparameter(key, value); } } query.sethint(queryhints.hint_readonly, boolean.true); result = query.getresultlist(); return result; } the query string of format
select count ( distinct ( <column> ) ) <table> c (exact ( <column> , (:clobvalue), null ) = 1 ) where "(exact ( , (:clobvalue), null ) = 1 )" function , "clobvalue" clob.
i can adjust query work follows:
select count ( distinct ( <column> ) ) <table> c (exact ( <column> , to_clob((:stringvalue)), null ) = 1 ) where "stringvalue" string works max sql string size (4000) , need pass in more that.
i have tried pass clob value java.sql.clob using method
final clob clobvalue = org.hibernate.engine.jdbc.clobproxy.generateproxy(stringvalue);
this results in
java.io.notserializableexception: org.hibernate.engine.jdbc.clobproxy
i have tried serialize clob using
final clob clob = org.hibernate.engine.jdbc.clobproxy.generateproxy(stringvalue);
final clob clobvalue = serializableclobproxy.generateproxy(clob);
but appears provide wrong type of argument "exact" function resulting in
(org.hibernate.engine.jdbc.spi.sqlexceptionhelper:144) - sql error: 29900, sqlstate: 99999 (org.hibernate.engine.jdbc.spi.sqlexceptionhelper:146) - ora-29900: operator binding not exist ora-06553: pls-306: wrong number or types of arguments in call 'exact'
after reading post using clobs entities have tried passing in byte[] provides wrong argument type
(org.hibernate.engine.jdbc.spi.sqlexceptionhelper:144) - sql error: 29900, sqlstate: 99999 (org.hibernate.engine.jdbc.spi.sqlexceptionhelper:146) - ora-29900: operator binding not exist ora-06553: pls-306: wrong number or types of arguments in call 'exact'i can pass in value string long doesn't break max string value
i have seen post (using function in clause clob parameter) seems suggest way use "plain old jdbc". not option. against hard deadline welcome.
i'm afraid assumptions clobs in oracle wrong. in oracle clob locator file handle. , such handle can created database only. can not pass clob bind variable. clob must somehow related database storage, because can occupy 176tb , can not held in java heap.
so usual approach call either db functions empty_clob() or dbms_lob.create_temporary (in form). clob from database if think "in" parameter. can write many data want locator (handle, clob) , can use clob parameter query.
if not follow pattern, code not work. not matter whether use jpa, springbatch or plan jdbc. constrain given database.
Comments
Post a Comment