【发布时间】:2021-04-18 12:28:17
【问题描述】:
我在 BIRT Designer 4.3.1 中遇到问题,我的脚本中有 SQL 查询。
sqlText = " SELECT MXZINVTRANS.ORGID, MXZINVTRANS.ITEMSETID, MXZINVTRANS.SITEID, MXZINVTRANS.TRANSDATE, MXZINVTRANS.STORELOC, MXZINVTRANS.STORELOC_DESCRIPTION, "
+ " MXZINVTRANS.ACTUALDATE, MXZINVTRANS.TOSTORELOC, MXZINVTRANS.MAXTAB, MXZINVTRANS.TRANSGROUP, MXZINVTRANS.DOCUMENT, "
+ " MXZINVTRANS.REFDOC, MXZINVTRANS.ITEMNUM, MXZINVTRANS.CONDITIONCODE, MXZINVTRANS.ITEM_DESCRIPTION, MXZINVTRANS.COMMODITYGROUP, "
+ " MXZINVTRANS.COMMODITYGROUP_DESCRIPTION, MXZINVTRANS.ISSUEUNIT, MXZINVTRANS.TRANSTYPE, MXZINVTRANS.TRANSTYPE_DESCRIPTION, MXZINVTRANS.QUANTITY, "
+ " MXZINVTRANS.MAXIMOQUANTITY, MXZINVTRANS.UNITCOST, MXZINVTRANS.LINECOST, MXZINVTRANS.FINPER, MXZINVTRANS.CURBALBEFORE, "
+ " MXZINVTRANS.CURBALAFTER, MXZINVTRANS.COSTCENTER, MXZINVTRANS.COSTCENTER2, MXZINVTRANS.SAPUNITCOST, MXZINVTRANS.SAPPRICEUNIT, "
+ " MXZINVTRANS.SAPLINECOST, MXZINVTRANS.SAPTRANSID, "
//+ " (case MXZINVTRANS.TRANSTYPE "
//+ " WHEN 'RECEIPT' THEN 'Prejem' "
//+ " WHEN 'RETURN' THEN 'Vrač. na skl.' "
//+ " WHEN 'ISSUE' THEN 'TOREK' "
//+ " WHEN 'TRANSFER' THEN 'Izd. med skl.' "
//+ " WHEN 'INSERTITEM' THEN 'Insertitem_??' "
//+ " WHEN 'VOIDRECEIPT' THEN 'Voidreceipt_??' "
//+ " WHEN 'SHIPTRANSFER' THEN 'shiptransfer_??' "
//+ " WHEN 'SHIPCANCEL' THEN 'shipcancel_??' "
//+ " WHEN 'SHIPRECEIPT' THEN 'shipreceipts_??' "
//+ " end) as tip_trans, "
+ " (case MXZINVTRANS.TRANSTYPE_DESCRIPTION "
+ " WHEN 'Prejem pošiljke' THEN (select description from locations where locations.location=MXZINVTRANS.tostoreloc and locations.siteid=MXZINVTRANS.SITEID) "
+ " WHEN 'Prenos pošiljke' THEN (select description from locations where locations.location=MXZINVTRANS.tostoreloc and locations.siteid=MXZINVTRANS.SITEID) "
+ " WHEN 'Ident prejema' THEN (select distinct VENDOR from PO where PO.PONUM=left(MXZINVTRANS.REFDOC, LOCATE('-',MXZINVTRANS.REFDOC)-1)) "
//+ " WHEN 'Ident vračila' THEN (select distinct NAME from COMPANIES where COMPANIES.COMPANY=(select distinct VENDOR from PO where PO.PONUM=left(MXZINVTRANS.REFDOC, LOCATE('-',MXZINVTRANS.REFDOC)-1) and PO.SITEID=MXZINVTRANS.SITEID)) "
+ " end) as opis_storeloc "
//+ " (select description from locations where locations.location=MXZINVTRANS.tostoreloc and locations.siteid=MXZINVTRANS.SITEID) as opis_storeloc "
+ " FROM MXZINVTRANS "
// Include the Maximo where clause
//+ " where " + params["where"]
//+ " and invbalances.itemnum = '2000049451' "
//+ " and invbalances.itemnum like '2000000%' "
+ " where 1=1 "
+ " and(( trunc(MXZINVTRANS.TRANSDATE) ) <= TO_DATE ('" + params["datum_do"] + "','YYYY-MM-DD') and ( trunc(MXZINVTRANS.TRANSDATE) ) >= TO_DATE ('" + params["datum_od"] + "','YYYY-MM-DD'))"
+ storeroomwhere
+ blagskupinawhere
+ itemwhere
+ tipwhere
//+ " and invbalances.itemnum ='2000049451' "
//+ " and siteid='6000'"
//+ " order by po.ponum "
;
maximoDataSet.setQuery(sqlText);
这可能是主要问题:
+ " WHEN 'Ident prejema' THEN (select distinct VENDOR from PO where PO.PONUM=left(MXZINVTRANS.REFDOC, LOCATE('-',MXZINVTRANS.REFDOC)-1)) "
首先要解释一下,REFFODC 的值类似于 4500038258-R2-120,使用 LEFT,我得到这个数字 4500038258,我在表 PO 中查看了它,其中等于 PONUM,然后我打印 VENDOR 作为数字 114263 例如.
问题就在这里,这里我有错误,但如果我直接写 MXZINVTRANS.REFDOC 编号 4500038258 则没有错误。另外,如果只打印 REFDOC 值的这个子字符串,我会在报告中得到正确的子字符串并且没有错误,那么问题可能就在这里?
【问题讨论】:
-
您应该将实际的错误消息添加到您的问题中。此外,我不知道这在 DB2 中是否可行,但是使用 Oracle,您可以跟踪会话或网络流量。这将向您显示确切的查询文本。您还可以将生成的 SQL 语句转储到文本文件中。我很确定生成的语句或绑定变量有问题。
标签: sql database select db2 birt