2016-08-09 5 views
0

특정 조건을 기반으로 요청 쿼리에 업데이트 문을 쓸 수 있습니까? 다음 쿼리를 실행하려고합니다 : 업데이트 istream StockEventWindow set price = 100 여기서 price> 250 및 id = 10;문 실행 오류 : select 절 표현 유형의 null 또는 0 요소 목록이 잘못되었습니다.

하지만 난 문을 실행 오류 오류 다음 점점 오전 : 잘못된 null 또는 select 절 발현 유형 [업데이트 IStream을 StockEventWindow 세트 가격 = 100 가격> (250) 및 ID = 10]

내 작업의 제로 요소 목록을 시간 이벤트가 수신 된 후 특정 시간 간격 후에 250보다 큰 가격의 이벤트를 업데이트하는 것입니다.

누군가가 필요에 따라 업데이트 쿼리를 사용하는 예를 들어 해결책을 제시하면 좋을 것입니다. 또한 가능한 경우 주문형 쿼리에서 명령 삭제 사용 예를 제공하십시오.

나는 에세프 문서 6.10.2 및 6.10.3 (Link)에서 언급 한대로 명령 업데이트 및 삭제 명령을 시도했다. 그러나 그것은 오류를주고있다.

내가 오류를 다음 무엇입니까 삭제 사용 : `com.espertech.esper.client.EPStatementSyntaxException : '삭제'근처의 구문이 잘못되었습니다 (예약 된 키워드) StockEventWindow에서 삭제 어디 ID = 10] com.espertech에서 .esper.epl.parse.ExceptionConvertor.convertStatement (ExceptionConvertor.java:40) at com.espertech.esper.epl.parse.ParseHelper.parse (ParseHelper.java:121) com.espertech.esper.core.service com.espertech.esper.core.service.EPRuntimeImpl.getExecuteMethod에서 com.espertech.esper.core.service.EPAdministratorHelper.compileEPL (EPAdministratorHelper.java:88) 에서 .EPAdministratorHelper.compileEPL (EPAdministratorHelper.java:115) (EPRuntimeImpl .java : 1456) 에서 com.espertech.esper.core.service.EPRuntimeImpl.executeQueryInternal (EPRuntimeImpl.java:1414) com.espertech.esper.core.service.EPRuntimeImpl.executeQuery (EPRuntimeImpl.java:1407) 에서 com.cor. cep.handler.Listener.onDemandUpdate (Listener.java:155) com.cor.cep.handler.Listener.update (Listener.java:76) at com.espertech.esper.core.service.StatementResultServiceImpl.dispatchInternal (com.espertech.esper.core.service.StatementResultServiceImpl.execute에서 com.espertech.esper.core.service.StatementResultServiceImpl.processDispatch (StatementResultServiceImpl.java:249) 에서 StatementResultServiceImpl.java:389) (StatementResultServiceImpl.java:235) 에서 com.espertech.esper.core.service.UpdateDispatchViewBase.execute (UpdateDispatchViewBase.java:75)com.espertech.esper.dispatch.DispatchServiceImpl.dispatchFromQueue에서 com.espertech.esper.core.service.UpdateDispatchFutureSpin.execute (UpdateDispatchFutureSpin.java:85) (DispatchServiceImpl.java:52) com.espertech.esper에서 에서 16,. dispatch.DispatchServiceImpl.dispatch (DispatchServiceImpl.java:31) at com.espertech.esper.core.service.EPRuntimeImpl.dispatch (EPRuntimeImpl.java:1238) at com.espertech.esper.core.service.EPRuntimeImpl.processTimeEvent (EPRuntimeImpl.java:529) at com.espertech.esper.core.service.EPRuntimeImpl.processEvent (EPRuntimeImpl.java:423) at com.espertech.esper.core.service.EPRuntimeImpl.sendEvent (EPRuntimeImpl.java:197) com.espertech.esper.core.service.EPRuntimeImpl.timerCallback (EPRuntimeImpl.java:171) com.espertech.esper.timer.EPLTimerTask.run (EPLTimerTask.java:61) at java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:511) at java.util.concurrent.FutureTask. runAndReset (FutureTask.java:308) at java.util.concurrent.스케줄 할 $ ScheduledFutureTask.access $ 301 (ScheduledThreadPoolExecutor.java:180) java.util.concurrent.ThreadPoolExecutor.runWorker에서 java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run (ScheduledThreadPoolExecutor.java:294) 에서 (ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) java.lang.Thread.run에서 (Thread.java:745)

에서 하고 오류를주고있다 업데이트를 사용하는 경우 : com.espertech.esper.client.EPStatementSyntaxException: Incorrect syntax near 'StockEventWindow' expecting 'istream' but found an identifier at line 1 column 7 [update StockEventWindow set price = 200 where id = 10] at com.espertech.esper.epl.parse.ExceptionConvertor.convertStatement(ExceptionConvertor.java:40) at com.espertech.esper.epl.parse.ParseHelper.parse(ParseHelper.java:109) at com.espertech.esper.core.service.EPAdministratorHelper.compileEPL(EPAdministratorHelper.java:115) at com.espertech.esper.core.service.EPAdministratorHelper.compileEPL(EPAdministratorHelper.java:88) at com.espertech.esper.core.service.EPRuntimeImpl.getExecuteMethod(EPRuntimeImpl.java:1456) at com.espertech.esper.core.service.EPRuntimeImpl.executeQueryInternal(EPRuntimeImpl.java:1414) at com.espertech.esper.core.service.EPRuntimeImpl.executeQuery(EPRuntimeImpl.java:1407) at com.cor.cep.handler.Listener.onDemandUpdate(Listener.java:155) at com.cor.cep.handler.Listener.update(Listener.java:76) at com.espertech.esper.core.service.StatementResultServiceImpl.dispatchInternal(StatementResultServiceImpl.java:389) at com.espertech.esper.core.service.StatementResultServiceImpl.processDispatch(StatementResultServiceImpl.java:249) at com.espertech.esper.core.service.StatementResultServiceImpl.execute(StatementResultServiceImpl.java:235) at com.espertech.esper.core.service.UpdateDispatchViewBase.execute(UpdateDispatchViewBase.java:75) at com.espertech.esper.core.service.UpdateDispatchFutureSpin.execute(UpdateDispatchFutureSpin.java:85) at com.espertech.esper.dispatch.DispatchServiceImpl.dispatchFromQueue(DispatchServiceImpl.java:52) at com.espertech.esper.dispatch.DispatchServiceImpl.dispatch(DispatchServiceImpl.java:31) at com.espertech.esper.core.service.EPRuntimeImpl.dispatch(EPRuntimeImpl.java:1238) at com.espertech.esper.core.service.EPRuntimeImpl.processThreadWorkQueueLatchedSpin(EPRuntimeImpl.java:870) at com.espertech.esper.core.service.EPRuntimeImpl.processThreadWorkQueue(EPRuntimeImpl.java:778) at com.espertech.esper.core.service.EPRuntimeImpl.processWrappedEvent(EPRuntimeImpl.java:477) at com.espertech.esper.core.service.EPRuntimeImpl.processEvent(EPRuntimeImpl.java:438) at com.espertech.esper.core.service.EPRuntimeImpl.sendEvent(EPRuntimeImpl.java:197) at com.cor.cep.handler.StockEventHandler.handle(StockEventHandler.java:336) at com.cor.cep.util.RandomStockEventGenerator$1.run(RandomStockEventGenerator.java:63) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

+0

은 "StockEventWindow"라는 이름의 창입니까? update-istream은 비행중인 이벤트를위한 것입니다. 명명 된 윈도우 이벤트를 업데이트하기 위해 "업데이트 중"을 사용합니다. – goodie

+0

예 StockEventWindow는 이름이 지정된 창입니다. 이름이 지정된 창에 업데이트를 사용할 수 있도록 작성되었지만 거기에 언급 된 구문을 사용하면 'StockEventWindow'근처에 'istream'이 예상되지만 구문이 잘못되었습니다. 1 행 8 열의 식별자 [Update StockEventWindow set price = 200 where id = 10]'. – aru007

답변

1

연속 쿼리 (createEPL)를 생성하는 APIS와 파이어 앤아를 실행하기위한 APIS 쿼리를 가져옵니다 (executeQuery). 그것들을 혼합하지 않는 것이 가장 좋습니다. "on update"는 연속적인 쿼리이고 "update window ..."는 fire-and-forget 쿼리입니다.