Db2 为什么我的查询在SQLCODE=-204时失败?

Db2 为什么我的查询在SQLCODE=-204时失败?,db2,jasper-reports,Db2,Jasper Reports,我正在为一个报告编写一些SQL(这是我第一次真正编写SQL,所以请不要过多地使用我的语法,lol),子查询似乎失败了。我不知道为什么,因为报告编译得很好,我可以在预览时出错之前将其放入Jaspersoft Studio。我是否正确地执行子查询 提前谢谢 SELECT PERSON.LAST_NAME, ACCOUNT.ACCOUNT_NUMBER, SHARE_ESCROW.ID, LOAN.PAYMENT_DUE_DATE, LN_IMPOUND_A

我正在为一个报告编写一些SQL(这是我第一次真正编写SQL,所以请不要过多地使用我的语法,lol),子查询似乎失败了。我不知道为什么,因为报告编译得很好,我可以在预览时出错之前将其放入Jaspersoft Studio。我是否正确地执行子查询

提前谢谢

SELECT
    PERSON.LAST_NAME,
    ACCOUNT.ACCOUNT_NUMBER, 
    SHARE_ESCROW.ID,
    LOAN.PAYMENT_DUE_DATE, 
    LN_IMPOUND_ANALYSIS.CUSHION_AMOUNT, 
    LN_IMPOUND_ANALYSIS.NEXT_P_AND_I_AMOUNT,
    LOAN.IMPOUND_AMOUNT,
    LN_IMPOUND_ANALYSIS.NEXT_IMPOUND_AMOUNT,
    SHARE_ESCROW.BALANCE, 
    SHARE_ESCROW.DESCRIPTION, 
    SHARE_ESCROW.CLOSE_DATE,
    i.LTV,
    CASE LOAN.PAYMENT_METHOD
        WHEN 'T' THEN 'Automated Transfer'
        WHEN 'A' THEN 'ACH'
        WHEN 'C' THEN 'Cash'
    END AS PAYMENT_METHOD
FROM    
    CORE.ACCOUNT AS ACCOUNT INNER JOIN CORE.LOAN AS LOAN ON ACCOUNT.SERIAL = LOAN.PARENT_SERIAL INNER JOIN
    CORE.LN_IMPOUND_ANALYSIS AS LN_IMPOUND_ANALYSIS ON LOAN.SERIAL = LN_IMPOUND_ANALYSIS.PARENT_SERIAL INNER JOIN
    CORE.SHARE AS SHARE_ESCROW ON ACCOUNT.SERIAL = SHARE_ESCROW.PARENT_SERIAL INNER JOIN
    CORE.PERSON AS PERSON ON PERSON.SERIAL = ACCOUNT.PRIMARY_PERSON_SERIAL,
    (SELECT 
        CASE COLLATERAL.AMOUNT
            WHEN 0 THEN 0
            WHEN NULL THEN 0
            ELSE LOAN.BALANCE / COLLATERAL.AMOUNT
        END AS LTV

    FROM
        CORE.COLLATERAL AS COLLATERAL INNER JOIN LOAN ON LOAN.SERIAL = COLLATERAL.PARENT_SERIAL
    ) i
WHERE
    SHARE_ESCROW.DESCRIPTION = 'Escrow Share' AND 
    SHARE_ESCROW.CLOSE_DATE IS NULL AND
    i.LTV != 0
编辑: 以下是错误:

net.sf.jasperreports.engine.JRException: net.sf.jasperreports.engine.JRRuntimeException: net.sf.jasperreports.engine.JRException: Error executing SQL statement for : Escrow32Analysis324532WIP_TableDataset_1579697577915_289752
    at com.jaspersoft.studio.editor.preview.view.control.ReportControler.fillReport(ReportControler.java:466)
    at com.jaspersoft.studio.editor.preview.view.control.ReportControler.access$18(ReportControler.java:441)
    at com.jaspersoft.studio.editor.preview.view.control.ReportControler$4.run(ReportControler.java:333)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: net.sf.jasperreports.engine.JRRuntimeException: net.sf.jasperreports.engine.JRException: Error executing SQL statement for : Escrow32Analysis324532WIP_TableDataset_1579697577915_289752
    at net.sf.jasperreports.engine.fill.JRFillSubreport.prepare(JRFillSubreport.java:809)
    at net.sf.jasperreports.components.table.fill.FillTableSubreport.prepareSubreport(FillTableSubreport.java:156)
    at net.sf.jasperreports.components.table.fill.FillTable.prepare(FillTable.java:400)
    at net.sf.jasperreports.engine.fill.JRFillComponentElement.prepare(JRFillComponentElement.java:151)
    at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:332)
    at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:384)
    at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:358)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillSummaryNoLastFooterSamePage(JRVerticalFiller.java:1102)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillSummary(JRVerticalFiller.java:1065)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportEnd(JRVerticalFiller.java:329)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:159)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:963)
    at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFiller.run(BaseFillHandle.java:120)
    at java.lang.Thread.run(Unknown Source)
Caused by: net.sf.jasperreports.engine.JRException: Error executing SQL statement for : Escrow32Analysis324532WIP_TableDataset_1579697577915_289752
    at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:240)
    at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1114)
    at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:691)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1314)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:931)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:873)
    at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:665)
    at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59)
    at net.sf.jasperreports.engine.fill.AbstractThreadSubreportRunner.run(AbstractThreadSubreportRunner.java:203)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    ... 1 more
Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=CMURPHY.LOAN, DRIVER=4.13.127
    at com.ibm.db2.jcc.am.id.a(id.java:677)
    at com.ibm.db2.jcc.am.id.a(id.java:60)
    at com.ibm.db2.jcc.am.id.a(id.java:127)
    at com.ibm.db2.jcc.am.no.c(no.java:2653)
    at com.ibm.db2.jcc.am.no.d(no.java:2641)
    at com.ibm.db2.jcc.am.no.a(no.java:2090)
    at com.ibm.db2.jcc.am.oo.a(oo.java:7671)
    at com.ibm.db2.jcc.t4.cb.h(cb.java:141)
    at com.ibm.db2.jcc.t4.cb.b(cb.java:41)
    at com.ibm.db2.jcc.t4.q.a(q.java:32)
    at com.ibm.db2.jcc.t4.sb.i(sb.java:135)
    at com.ibm.db2.jcc.am.no.ib(no.java:2059)
    at com.ibm.db2.jcc.am.oo.sc(oo.java:3559)
    at com.ibm.db2.jcc.am.oo.b(oo.java:4348)
    at com.ibm.db2.jcc.am.oo.fc(oo.java:743)
    at com.ibm.db2.jcc.am.oo.executeQuery(oo.java:713)
    at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:233)
    ... 11 more

您在日志中看到的消息:

DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=CMURPHY.LOAN
意味着在模式
CMURPHY
中找不到对象(在您的示例中是一个表)
LOAN
(SQLCODE-204)。正如其他人在注释中提到的,查询中唯一缺少显式架构的表引用是:

FROM 
    CORE.COLLATERAL AS COLLATERAL INNER JOIN LOAN ON LOAN.SERIAL ...
---------------------------------------------^^^^
因此,默认情况下,数据库服务器在默认模式中查找该表,即与您的用户ID(CMURPHY)匹配的表。显然它不在那里

将显式架构名称添加到表引用:

FROM 
    CORE.COLLATERAL AS COLLATERAL INNER JOIN CORE.LOAN AS LOAN ON LOAN.SERIAL ...

对于行
CORE.COLLATERAL AS COLLATERAL in JOIN LOAN ON LOAN.SERIAL
尝试替换为
CORE.COLLATERAL AS COLLATERAL in JOIN CORE.LOAN AS LOAN ON LOAN.SERIAL
这是否回答了您的问题?您可以使用内置本地Db2语法解析的SQL编辑器,这有助于发现此类错误。请看IBM Data Studio或IBM DB2数据库管理控制台,这非常有意义,谢谢。它现在似乎起作用了。