Проблемы при вызове хранимой процедуры Oracle с входным параметром типа CLOB из java JDBCTemplate - PullRequest
2 голосов
/ 10 мая 2019

Я использую функцию JDBCtemplate при загрузке Sring и пытаюсь вызвать хранимую процедуру оракула, имеющую входной параметр типа CLOB.Я использовал LobHandler для преобразования входной строки в Clob, но я получаю сообщение об ошибке «Причина: java.sql.SQLException: ORA-22922: несуществующее значение большого объекта»

Below is the sample code:

@Override
    public Map<String, Object> getNewRequestFids(String cisarResponse){
        Map<String, Object> resultMap = new HashMap<String,Object>();
        LobHandler lobHandler = new DefaultLobHandler();

        SimpleJdbcCall executor = new SimpleJdbcCall(jdbcTemplate).withProcedureName("CA_FID.GETREQUESTFIDS")
                .withoutProcedureColumnMetaDataAccess();
        executor.addDeclaredParameter(new SqlParameter("P_FIDLIST", Types.CLOB));
        executor.addDeclaredParameter(new SqlOutParameter("P_RESULT", OracleTypes.CURSOR, new FidExtractor()));

        executor.compile();
        SqlParameterSource params = new MapSqlParameterSource().addValue("P_FIDLIST", new SqlLobValue(cisarResponse, lobHandler));

        resultMap = executor.execute(params);
        System.out.println("The resultMap is: " + resultMap);

return resultMap;
}

Input to this function is like "finalJsonString.toString" where finalJsonString is "{"items":[{"id":7849081,"username":"marcinTest","description":"TEST DESCRIPTION","privileged":true,"critical":true,"system":{"id":4648,"systemName":"CBDEMLA1","description":"WPB - DEV","environment":"Production","type":"MIDRANGE","platform":null,"platformDetails":null,"sourceSystemId":null,"hostName":"CBDEMLA1","databaseAttributes":null},"owner":{"id":1010132677,"firstName":"MICHAL","lastName":"KOSTRZEWSKI","soeId":"MK32677"}}]}"
...