起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12489|回复: 17

[结贴] KSQL报错

  [复制链接]

185

主题

777

帖子

1644

积分

金牌会员

Rank: 6Rank: 6

积分
1644
QQ
发表于 2013-11-6 09:58:23 | 显示全部楼层 |阅读模式
版本: X5.2.5 小版本号:
数据库: 服务器操作系统: 应用服务器:
客户端操作系统: 浏览器:
这个KSQL有什么问题?执行报错
  1. UPDATE TC_InstorageGoodsDetail t SET t.fWPZT = '在库'
  2. WHERE EXISTS (
  3. SELECT a.*
  4. FROM TC_InstorageDetail a
  5. WHERE t.GoodsID = a.GoodsID AND a.InStoreMode = '采购入库' AND a.fID = t.fMaster AND a.InStoreNo = 'RK2013110600001')
复制代码
我把a.fID 改成a也不行
天天就知道打酱油打酱油,有点出息行么。QQ:497923435

998

主题

4330

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
10732
QQ
发表于 2013-11-6 10:03:43 | 显示全部楼层
错误信息贴出来
孤舟蓑笠翁,独钓寒江雪。
X5牛刀交流民间第一群:30057529
提供有偿服务,联系WX:18332024
bex5疑难问题解决方案
回复 支持 反对

使用道具 举报

185

主题

777

帖子

1644

积分

金牌会员

Rank: 6Rank: 6

积分
1644
QQ
 楼主| 发表于 2013-11-6 10:17:31 | 显示全部楼层
ecoolper 发表于 2013-11-6 10:03
错误信息贴出来

  1. 2013-11-06 10:13:34 excute Action error:<?xml version="1.0" encoding="UTF-8"?>
  2. <actions><action direct-execute="false" process="/TCERP/InStorage/process/test/testProcess" activity="businessActivity2" action-flag="__action_0__" executor="/ORG01.ogn/PSN01@ORG01.psm" execute-context="" name="externalAdvanceProcessAction" accept="*/*">        <parameters xmlns:xbiz="http://www.justep.com/xbiz#">                <parameter name="task">                        <xbiz:simple type="http://www.w3.org/2001/XMLSchema#String">1EF37BD5A306406E8C7866C238CCE997</xbiz:simple>                </parameter><parameter name="control"><xbiz:object class="com.justep.system.process.ProcessControl"><process-control><task-join>false</task-join><save-history>true</save-history><task-join-mode>twmMultiple</task-join-mode><customized-enabled>false</customized-enabled><jump-enabled>false</jump-enabled><message/><dialog-enabled>true</dialog-enabled><status>none</status><to><process-control-item id="D774D0B13236488D9DD59319A23F842A" activity-id="D774D0B13236488D9DD59319A23F842A" is-end="true" selected="true" readonly="true"><unit>end1</unit><template/><process>/TCERP/InStorage/process/test/testProcess</process><executor-kinds/><executor-range/><executors/><task-relation-value><sTypeName>入库管理</sTypeName><sLock>3BD744EF894B430DB411B5006CB26254</sLock><SA_Task>259AEBD4B22E4E24BDC9DBA868A31724</SA_Task><sActivityInTemplate>end1</sActivityInTemplate><sProcessTemplateID2/><sProcess>/TCERP/InStorage/process/test/testProcess</sProcess><sActivityName/><sLastModifyTime>2013-11-06T10:13:26.375Z</sLastModifyTime><sProcessName>入库管理</sProcessName></task-relation-value></process-control-item></to><notice/></process-control>
  3. </xbiz:object></parameter>        </parameters></action></actions>
  4. com.justep.model.exception.ModelException: java.lang.reflect.InvocationTargetException
  5.         at com.justep.system.action.Engine.invokeActions(Unknown Source)
  6.         at com.justep.business.server.BusinessServer.doAction(Unknown Source)
  7.         at com.justep.business.server.BusinessServer.doExcute(Unknown Source)
  8.         at com.justep.business.server.BusinessServer.excute(Unknown Source)
  9.         at com.justep.business.server.BusinessServerServlet.execService(Unknown Source)
  10.         at com.justep.business.server.BusinessServerServlet.service(Unknown Source)
  11.         at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  12.         at com.justep.x.bs.BusinessServerServlet.service(Unknown Source)
  13.         at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  14.         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
  15.         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  16.         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
  17.         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
  18.         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
  19.         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  20.         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  21.         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
  22.         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
  23.         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
  24.         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
  25.         at java.lang.Thread.run(Thread.java:595)
  26. Caused by: java.lang.reflect.InvocationTargetException
  27.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  28.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  29.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  30.         at java.lang.reflect.Method.invoke(Method.java:592)
  31.         at com.justep.system.action.Engine.invokeActions(Native Method)
  32.         ... 21 more
  33. Caused by: java.lang.reflect.InvocationTargetException
  34.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  35.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  36.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  37.         at java.lang.reflect.Method.invoke(Method.java:592)
  38.         at com.justep.system.action.Engine.invokeAction(Native Method)
  39.         at com.justep.system.action.Engine.invokeAction(Unknown Source)
  40.         at com.justep.model.impl.UtilImplementInstance.invokeAction(Unknown Source)
  41.         at com.justep.model.impl.UtilImplementInstance.invokeAction(Unknown Source)
  42.         at com.justep.system.action.ActionUtils.invokeAction(Unknown Source)
  43.         at com.justep.system.process.ProcessUtils.advanceProcess(Unknown Source)
  44.         at ExternalProcessProcedure.advanceProcess(ExternalProcessProcedure.java:34)
  45.         ... 26 more
  46. Caused by: com.justep.model.exception.ModelException: 执行ksql:update TC_InstorageGoodsDetail t                 set t.fWPZT = '在库' where exists (                select a.* from TC_InstorageDetail a                 where t.GoodsID = a.GoodsID                         and a.InStoreMode = '采购入库'                        and a.fID = t.fMaster                        and a.InStoreNo = 'RK2013110600001')时出错!
  47.         at com.justep.system.data.impl.TableUtilsImplement.ksqlUpdate(Unknown Source)
  48.         at com.justep.system.data.impl.TableUtilsImplement.ksqlExecuteUpdate(Unknown Source)
  49.         at com.justep.system.data.KSQL.executeUpdate(Unknown Source)
  50.         at com.justep.system.data.KSQL.executeUpdate(Unknown Source)
  51.         at com.justep.system.data.KSQL.executeUpdate(Unknown Source)
  52.         at TestProcess.updateGoodsDetail(TestProcess.java:131)
  53.         at TestProcess.businessActivity2AfterAdvance(TestProcess.java:103)
  54.         ... 37 more
  55. Caused by: com.justep.model.exception.ModelException: 模型/TCERP/InStorage/data下未找到概念TC_InstorageDetail的Store配置!
  56.         at com.justep.util.Utils.check(Unknown Source)
  57.         at com.justep.system.ksql.ConceptMapping.getConceptMapping(Unknown Source)
  58.         at com.justep.system.ksql.parser.AbstractParser.confirmSymTable(Unknown Source)
  59.         at com.justep.system.ksql.parser.AbstractParser.handleAllRelation(Unknown Source)
  60.         at com.justep.system.ksql.parser.AbstractParser.selectSentenceNode(Unknown Source)
  61.         at com.justep.system.ksql.parser.AbstractParser.selectSentenceNode(Unknown Source)
  62.         at com.justep.system.ksql.parser.AbstractParser.compExpression(Unknown Source)
  63.         at com.justep.system.ksql.parser.AbstractParser.notExpression(Unknown Source)
  64.         at com.justep.system.ksql.parser.AbstractParser.andExpression(Unknown Source)
  65.         at com.justep.system.ksql.parser.AbstractParser.orExpression(Unknown Source)
  66.         at com.justep.system.ksql.parser.AbstractParser.conditionExpression(Unknown Source)
  67.         at com.justep.system.ksql.parser.AbstractParser.whereExpression(Unknown Source)
  68.         at com.justep.system.ksql.parser.UpdateParser.start(Unknown Source)
  69.         at com.justep.system.ksql.parser.AbstractParser.parse(Unknown Source)
  70.         ... 44 more
复制代码
后台异常信息提示找不到store配置,但是SQL中的两张表都是在同一个业务模块下的啊
天天就知道打酱油打酱油,有点出息行么。QQ:497923435
回复 支持 反对

使用道具 举报

998

主题

4330

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
10732
QQ
发表于 2013-11-6 10:29:26 | 显示全部楼层
x5对子查询支持的不全面,建议直接放弃这种写法,
用com.justep.system.data.SQL.executeUpdate方法做更新
sql.jpg

另:希望x5在KSQL方面加强支持
孤舟蓑笠翁,独钓寒江雪。
X5牛刀交流民间第一群:30057529
提供有偿服务,联系WX:18332024
bex5疑难问题解决方案
回复 支持 反对

使用道具 举报

185

主题

777

帖子

1644

积分

金牌会员

Rank: 6Rank: 6

积分
1644
QQ
 楼主| 发表于 2013-11-6 10:40:35 | 显示全部楼层
ecoolper 发表于 2013-11-6 10:29
x5对子查询支持的不全面,建议直接放弃这种写法,
用com.justep.system.data.SQL.executeUpdate方法做更新
...

那个List binds参数是什么参数?是SQL语句拼接时的参数吗?
天天就知道打酱油打酱油,有点出息行么。QQ:497923435
回复 支持 反对

使用道具 举报

45

主题

4492

帖子

3960

积分

论坛元老

Rank: 8Rank: 8

积分
3960
QQ
发表于 2013-11-6 10:47:07 | 显示全部楼层
ly201026 发表于 2013-11-6 10:40
那个List binds参数是什么参数?是SQL语句拼接时的参数吗?

打开本模块data目录中的model.config.xml文件,include其概念TC_InstorageDetail 模块的data目录

把a.fID 改成a 再试试
向前进,向前进,我们……
回复 支持 反对

使用道具 举报

998

主题

4330

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
10732
QQ
发表于 2013-11-6 10:47:49 | 显示全部楼层
对,是参数,jdbc原生的参数写法:select * from table where fid =?
孤舟蓑笠翁,独钓寒江雪。
X5牛刀交流民间第一群:30057529
提供有偿服务,联系WX:18332024
bex5疑难问题解决方案
回复 支持 反对

使用道具 举报

185

主题

777

帖子

1644

积分

金牌会员

Rank: 6Rank: 6

积分
1644
QQ
 楼主| 发表于 2013-11-6 10:53:54 | 显示全部楼层
fpj 发表于 2013-11-6 10:47
打开本模块data目录中的model.config.xml文件,include其概念TC_InstorageDetail 模块的data目录

把a.fI ...

不行的,那两个表本来就在改业务模块下。data应该不需要引用。a.fid改成a也试过
天天就知道打酱油打酱油,有点出息行么。QQ:497923435
回复 支持 反对

使用道具 举报

185

主题

777

帖子

1644

积分

金牌会员

Rank: 6Rank: 6

积分
1644
QQ
 楼主| 发表于 2013-11-6 10:59:05 | 显示全部楼层
ecoolper 发表于 2013-11-6 10:47
对,是参数,jdbc原生的参数写法:select * from table where fid =?
  1. public static void updateGoodsDetail() {
  2.                 String status = "";
  3.                 String inStoreNo = ProcessUtils.getProcessData1();
  4.                 String detailSql = "select t.* from TC_InStorageDetail t where t.InStoreNo = '"+inStoreNo+"'";
  5.                 Table table = KSQL.select(detailSql, null, DATA_MODEL, null);
  6.                 Iterator<Row> it = table.iterator();
  7.                 while(it.hasNext()) {
  8.                         Row row = it.next();
  9.                         String storeMode = row.getString("InStoreMode");
  10.                         if("采购入库".equals(storeMode) || "翻新入库".equals(storeMode)) {
  11.                                 status = "在库";
  12.                         }else if("废品入库".equals(storeMode)) {
  13.                                 status = "旧品在库";
  14.                         }
  15.                         List list = new ArrayList();
  16.                         list.add(status);
  17.                         list.add(storeMode);
  18.                         list.add(inStoreNo);
  19.                         String sql = "update TC_InstorageGoodsDetail t " +
  20.                                                  "                set t.fWPZT = ? " +
  21.                                                  "where exists (" +
  22.                                                  "                select a.* from TC_InstorageDetail a " +
  23.                                                  "                where t.GoodsID = a.GoodsID " +
  24.                                                  "                        and a.InStoreMode = ?" +
  25.                                                  "                        and a = t.fMaster" +
  26.                                                  "                        and a.InStoreNo = ?')";
  27.                         Map<String,String> mapSql = new HashMap<String,String>();
  28.                         mapSql.put("sql", sql);
  29. //                        KSQL.executeUpdate(sql, null, DATA_MODEL, null);
  30.                         SQL.executeUpdate(mapSql, list, DATA_MODEL);
复制代码
是这样写的吗?貌似有提示非法SQL参数什么意思?
  1. Caused by: com.justep.model.exception.ModelException: 非法的sql参数,当前的数据库类型:MSSQL传入的sql中的数据库类型:[sql]
  2.         at com.justep.util.Utils.check(Unknown Source)
  3.         at com.justep.system.data.SQL.executeUpdate(Unknown Source)
  4.         at com.justep.system.data.SQL.executeUpdate(Unknown Source)
  5.         at TestProcess.updateGoodsDetail(TestProcess.java:141)
  6.         at TestProcess.businessActivity2AfterAdvance(TestProcess.java:106)
  7.         ... 37 more
复制代码
天天就知道打酱油打酱油,有点出息行么。QQ:497923435
回复 支持 反对

使用道具 举报

998

主题

4330

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
10732
QQ
发表于 2013-11-6 10:59:24 | 显示全部楼层
这是x5.2.4中demo的例子
  1.                 String oracle = "SELECT * FROM ( SELECT RPRODUCTID , RPRODUCTNAME ,(SELECT RCATEGORYNAME FROM DEMO_REPORTPRODUCTCATEGORY WHERE DEMO_REPORTPRODUCTCATEGORY.RCATEGORYID = DEMO_REPORTPRODUCTS.RCATEGORYID) AS RCATEGORYNAME , (SELECT RCOMPANYNAME FROM DEMO_REPORTSUPPLIERS WHERE DEMO_REPORTSUPPLIERS.RSUPPLIERID = DEMO_REPORTPRODUCTS.RSUPPLIERID)AS RCOMPANYNAME, RQUANTITYPERUNIT, RUNITPRICE, RUNITSINSTOCK FROM DEMO_REPORTPRODUCTS )A ";
  2.                 String mssql =  "SELECT * FROM ( SELECT RPRODUCTID , RPRODUCTNAME ,(SELECT RCATEGORYNAME FROM DEMO_REPORTPRODUCTCATEGORY WHERE DEMO_REPORTPRODUCTCATEGORY.RCATEGORYID = DEMO_REPORTPRODUCTS.RCATEGORYID) AS RCATEGORYNAME , (SELECT RCOMPANYNAME FROM DEMO_REPORTSUPPLIERS WHERE DEMO_REPORTSUPPLIERS.RSUPPLIERID = DEMO_REPORTPRODUCTS.RSUPPLIERID)AS RCOMPANYNAME, RQUANTITYPERUNIT, RUNITPRICE, RUNITSINSTOCK FROM DEMO_REPORTPRODUCTS )A ";
  3.                
  4.                 oracle += " WHERE 1=1 ";
  5.                 mssql += " WHERE 1=1 ";
  6.                 if(Utils.isNotEmptyString(company)&& !company.equals("null") ){
  7.                         oracle += String.format("and A.RCOMPANYNAME = '%s' ", company);
  8.                         mssql += String.format("and A.RCOMPANYNAME = '%s' ", company);
  9.                 }
  10.                 if(Utils.isNotEmptyString(product)&&!product.equals("null") ){
  11.                         oracle += String.format("and A.RPRODUCTNAME = '%s' ", product);
  12.                         mssql += String.format("and A.RPRODUCTNAME = '%s' ", product);
  13.                 }
  14.                 if(Utils.isNotEmptyString(category)&&!category.equals("null") ){
  15.                         oracle += String.format("and A.RCATEGORYNAME = '%s' ", category);
  16.                         mssql += String.format("and A.RCATEGORYNAME = '%s' ", category);
  17.                 }
  18.                
  19.                 HashMap<String,String> sqlMap = new HashMap<String,String>();
  20.                 sqlMap.put(SQL.DEFAULT_DB_NAME,mssql);
  21.                 sqlMap.put(DatabaseProduct.ORACLE.name(),oracle);
  22.                 sqlMap.put(DatabaseProduct.MSSQL.name(),mssql);
  23.                 sqlMap.put(DatabaseProduct.KINGBASE.name(),oracle);
  24.                 sqlMap.put(DatabaseProduct.SYBASE.name(),mssql);
  25.                 sqlMap.put(DatabaseProduct.DB2.name(),oracle);
  26.                 return SQL.select(sqlMap,null,"/demo/report/data");
复制代码

评分

参与人数 1 +8 收起 理由
jishuang + 8 赞一个!

查看全部评分

孤舟蓑笠翁,独钓寒江雪。
X5牛刀交流民间第一群:30057529
提供有偿服务,联系WX:18332024
bex5疑难问题解决方案
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-20 11:14 , Processed in 0.133301 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表