While editing pricing rules in SAS® High-Performance Markdown Optimization, a Pricing Rules error window might pop up containing the following message:
An error occurred saving the price rules. Some rules have been saved. null
This message typically occurs when you attempt to save too many price ranges with custom (non-default) price endings. The root cause is that the length of the string required to save the data is longer than the length of the database field used to store the data.
You will also find the following Java stack trace in the mid-tier log when this error occurs, indicating a database error (ORA-12899: value too large for column):
2011-11-29 13:48:24,396 [http-0.0.0.0-8080-3-1571] ERROR [] org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateCo nverter.java:103) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(Abstract FlushingEventListener.java:298) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListe ner.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) at com.sas.solutions.di.server.db.PersistenceManager.endHiberateTxn(PersistenceMana ger.java:687) at com.sas.solutions.di.server.db.PersistenceManager.commit(PersistenceManager.java :608) at com.sas.solutions.di.server.util.Interceptors.privateInvoke(Interceptors.java:16 1) at com.sas.solutions.di.server.spring.SpringServer.invoke(SpringServer.java:173) at com.sas.solutions.di.server.spring.SessionRemoteInvocationExecutor.invoke(Sessio nRemoteInvocationExecutor.java:47) at org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(Remote InvocationBasedExporter.java:78) at org.springframework.remoting.support.RemoteInvocationBasedExporter.invokeAndCrea teResult(RemoteInvocationBasedExporter.java:114) at org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter.handleReques t(HttpInvokerServiceExporter.java:74) at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequest HandlerAdapter.java:49) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.j ava:875) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.ja va:809) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet .java:571) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:51 1) at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilt erChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain. java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:9 6) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilt erChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain. java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:2 30) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:1 75) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociatio nValve.java:182) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionVa lve.java:157) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109 ) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Pr otocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) at java.lang.Thread.run(Thread.java:619) Caused by: java.sql.BatchUpdateException: ORA-12899: value too large for column "DI_DM"."PRICE_GRID"."PRICE_ENDING_SUMMARY_LIST" (actual: 625, maximum: 500) at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement. java:10070) at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.ja va:213) at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.jav a:294) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246) ... 38 more
There is no workaround for this issue other than to limit the number of price ranges or limit the customization of price endings within a range (i.e. leave the 'any' boxes checked since it takes less storage space to store the default price endings).
Product Family | Product | System | Product Release | SAS Release | ||
Reported | Fixed* | Reported | Fixed* | |||
SAS System | SAS High-Performance Markdown Optimization | Linux for x64 | 4.3_M1 | 5.2 | 9.2 TS2M3 | 9.3 TS1M0 |
Type: | Problem Note |
Priority: | alert |
Date Modified: | 2013-11-21 13:54:01 |
Date Created: | 2011-11-29 14:04:38 |