RPGLE SQL 查询不返回结果,但直接运行 SQL 时会返回结果

问题描述 投票:0回答:1

一些背景信息。我们使用 Infor XA 作为我们的 ERP,我尝试编写一个 RPGLE 程序作为用户操作,将采购订单信息保存到 IFS 上的 XML 中。然后,表单包将获取该信息。有一张包含采购订单标题信息的表格,还有一张包含行的表格。

问题是程序运行时代码不会返回任何结果,即使 where 子句中有正确的订单号。

如果我将该语句从程序中取出并直接运行它,它将返回所有标头信息。当我单步执行并调试它时,没有填充任何变量。我根据数据库字段声明了所有变量类型。

       exec sql
       select p.ordno,                    // Order Number
              p.revnb,                    // Revesion Number
              p.revdt,                    // Revision Date
              p.actdt,                    // PO Completion Date
              s.viads,                    // Ship Via Description
              t.trmds,                    // Terms Description
              p.reprt,                    // Reprint code
              p.UUSAPM,                   // User switch field to send PO as email.
              b.buynm,                    // Buyer Name
              b.buyph,                    // Buyer Phone
              b.eadr,                     // Buyer Email

              v.vn35,                     // Vendor Name
              v.v135,                     // Vender Address 1
              v.v235,                     // Vendor Address 2
              v.vcity,                    // Vendor City
              v.vstac,                    // Vendor State Code
              v.vzipc,                    // Vendor Zip
              v.vcntr,                    // Vendor Country,
              v.vetel,                    // Vendor Tel
              v.eadr,                     // Vendor Email Address

              d.sn35,                     // Ship To Name
              d.s135,                     // Ship To Address 1
              d.s235,                     // Ship To Address 2
              d.s335,                     // Ship To Address 3
              d.scity,                    // Ship To City
              d.sstac,                    // Ship To State Code
              d.shpzp,                    // Ship to Zip
              d.scntr,                    // Ship to Country
              d.stele,                    // Ship to Telephone
              d.eadr,                     // Ship to Email Address

              c.sn35,                     // bill To Name
              c.s135,                     // Bill To Address 1
              d.s235,                     // Bill To Address 2
              c.s335,                     // Bill To Address 3
              c.scity,                    // Bill To City
              c.sstac,                    // Bill To State Code
              c.shpzp,                    // Bill To Zip
              c.scntr,                    // Bill To Country
              c.stele,                    // Bill To Telehpone
              c.eadr                      // Bill to Email
         into :Order,                     //  Purchase Order Number
              :OrdRev,                    //  Revision Number
              :OrdRevDt,                  //  Revision Date
              :Pocmpdt,                   //  PO Complete Date
              :Shpvids,                   //  Ship Via Descirption
              :Terms,                     //  Terms Description
              :rpprt,                     //  Reprint Code
              :EmlPO,                     //  Send PO as Email
              :Buynm,                     //  Buyer FileName
              :BuyTel,                    //  Buyer Telephone
              :Buyeadr,                   //  Buyer Email

              :VName,                     //  Vendor Name
              :Vadd1,                     //  Vendor Address 1
              :Vadd2,                     //  Vendor Address 2
              :Vadd3,                     //  Vendor Address 3
              :Vcity,                     //  Vendor City
              :Vstac,                     //  Vendor State Code
              :Vzipc,                     //  Vendor Zip
              :Vcntr,                     //  Vendor Country
              :Vtel,                      //  Vendor Telphone
              :Veadr,                     //  Vendor Email

              :Shptnm,                    //  Ship To Name
              :Shptst1,                   //  Ship to Address 1
              :Shptst2,                   //  Ship to Address 2
              :Shptst3,                   //  Ship to Address 3
              :Shptcty,                   //  Ship to City
              :Shptstc,                   //  Ship to State
              :ShptZip,                   //  Ship to Zip
              :Shptcnt,                   //  Ship to Country
              :cnteml,                    //  Contact Email

              :Bname,                     //  Bill To FileName
              :BAdd1,                     //  Bill to Address 1
              :Badd2,                     //  Bill to Address 2
              :Badd3,                     //  Bill to Address 3
              :Bcity,                     //  Bill to City
              :Bstc,                      //  Bill to State Code
              :Bzip,                      //  Bill to zip
              :Bcntr,                     //  Bill to Country
              :BTel,                      //  Bill to Telephone
              :Beadr                      //  Bill to Email

         from amflibn.pomast as p
         join amflibn.vennam as v
            on  p.vndnr = v.vndnr
         join amflibn.buyerf as b
            on  p.buyno = b.buyno
         left outer join amflibn.termsf as t
            on  p.trmcd = t.trmcd
         left outer join amflibn.shipvf as s
            on  p.viacd = s.viacd
         join amflibn.shpmst as d
            on  p.shpid = d.shpid
            and p.house = d.house
         join amflibn.shpmst as c
            on  p.bilid = c.shpid
            and p.house = c.house
         where p.ORDNO = 'P974625';

         XMLdata = '<?xml version="1.0" encoding="UTF-8"?>'
            + '<PurchaseOrder>'
            + '<Header>'
            + '<OrderNumber>' + %trim(Order) +'</OrderNumber>'
            + '<OrderRev>' + %char(OrdRev) +'</OrderRev>'
            + '<OrderRevDate>' + %char(OrdRevDt) + '</OrderRevDate>'
            + '<ShipVia>' + %trim(Shpvids) + '</ShipVia>'
            + '<Terms>'    + %trim(Terms) + '</Terms>'
            + '<ReprintCode>' + %trim(rpprt) + '</ReprintCode>'
            + '<EmailPO>' + %trim(EmlPO) + '</EmailPO>'
            + '<BuyerName>' +%trim(Buynm) + '</BuyerName>'
            + '<BuyerTel>' + %trim(BuyTel) + '</BuyerTel>'
            + '<BuyerEadr>' + %trim(Buyeadr) + '</BuyerEadr>'

            + '<VendorName>' + %trim(VName) + '</VendorName>'
            + '<VendorAddress1>' + %trim(Vadd1) + '</VendorAddress1>'
            + '<VendorAddress2>' + %trim(Vadd2) + '</VendorAddress2>'
            + '<VendorAddress3>' + %trim(Vadd3) + '</VendorAddress3>'
            + '<VendorCity>' + %trim(Bcity) + '</VendorCity>'
            + '<VendorState>' + %trim(Bstc) + '</VendorState>'
            + '<VendorZip>' + %trim(Bzip) + '</VendorZip>'
            + '<VendorCountry>' + %trim(Vcntr) + '</VendorCountry>'
            + '<VendorTel>' + %trim(Vtel) + '</VendorTel>'
            + '<VendorEmail>' + %trim(Veadr) +'</VendorEmail>'

            + '<ShipToName>' + %trim(Shptnm) + '</ShipToName>'
            + '<ShipToStreet1>' + %trim(BAdd1) + '</ShipToStreet1>'
            + '<ShipToStreet2>' + %trim(BAdd2) + '</ShipToStreet2>'
            + '<ShipToStreet3>' + %trim(BAdd3) + '</ShipToStreet3>'
            + '<ShipToCity>' + %trim(Shptcty) + '</ShipToCity>'
            + '<ShipToState>' + %trim(Shptstc) + '</ShipToState>'
            + '<ShipToZip>' + %trim(Bzip) + '</ShipToZip>'
            + '<ShipToCountry>' + %trim(Shptcnt)   + '</ShipToCountry>'
            + '<ContactName>' + %trim(Shptcnt)  + '<ContactName>'
            + '<ContactEmail>' + %trim(cnteml) + '<ContactEmail>'

            + '<BillToName>' + %trim(Bname) + '</BillToName>'
            + '<BillToStreet1>' + %trim(Shptst1) + '</BillToStreet1>'
            + '<BillToStreet2>' + %trim(Shptst2) + '</BillToStreet2>'
            + '<BillToStreet3>' + %trim(Shptst3) + '</BillToStreet3>'
            + '<BillToCity>' + %trim(Shptcty) + '</BillToCity>'
            + '<BillToState>' + %trim(Shptstc) + '</BillToState>'
            + '<BillToZip>' + %trim(ShptZip) + '</BillToZip>'
            + '<BillToCountry>' + %trim(Bcntr)   + '</BillToCountry>'
            + '<ContactName>' + %trim(BTel)  + '<ContactName>'
            + '<ContactEmail>' + %trim(Beadr) + '<ContactEmail>'
            + '</Header>'
            + '<Detail>';

我不知道如何进行进一步的调试。任何帮助都会很棒。对于 RGPLE 语言来说还是个新手。如果您知道从数据库和 XML 文件中获取此信息的更好方法,我洗耳恭听。

db2-400
1个回答
0
投票

经过大量挖掘之后。问题是我有一个外部联接,这将导致返回结果中出现空值。 RPGLE 不能很好地处理空字段,需要格外小心。但是,如果您将可能具有空值的列包装在合并中返回,则可以解决问题。

还要确保您正在查看 SQL 错误代码。

© www.soinside.com 2019 - 2024. All rights reserved.