【发布时间】:2019-09-09 19:29:13
【问题描述】:
当使用iSeries Access ODBC Driver 进行 Microsoft Access 直通查询时,是否可以使用多个语句..?
这是 DB2 for iSeries v7r3m0 和 Access 2007,使用 DBeaver 5.2.5 开发的 SQL。
我之前的所有工作都是使用单个 WITH/SELECT 语句进行查询。但这是我的第一个包含多个语句的脚本。通常我会将其复制到 Access 传递查询中,以使其对我的用户来说很漂亮,但是当我尝试运行这个新查询时,我收到以下错误:
ODBC call failed. [IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0104 Token ; was not valid. Valid tokens: <END-OF-STATEMENT>
错误很明显:它不喜欢语句终止符,也就是分号。如果我将其删除,则违规标记将变为以下 DECLARE 声明,无限循环。
所以显而易见的问题变成了:这甚至可以在 Access 直通查询中完成吗?
我检查了documentation 是否有任何可能有用的连接字符串关键字,但没有找到。
我的脚本的一般流程如下。这在 DBeaver 中有效,但在 Access 中无效:
CREATE OR REPLACE VARIABLE F_CERTOB.NPS_FIRSTDAY NUMERIC(8)
DEFAULT ( SELECT (YEAR (CURDATE() - 4 MONTHS) * 10000) +
(MONTH(CURDATE() - 4 MONTHS) * 100) FROM SYSIBM.SYSDUMMY1 ) ;
DECLARE GLOBAL TEMPORARY TABLE SESSION.NPS_DATA0
AS ( WITH SOMEDATA AS ( SELECT *
FROM F_CERTOB.DAILYT
WHERE DACOMP = '1'
AND DAIDAT >= (F_CERTOB.NPS_FIRSTDAY+0)
AND DAIDAT <= (F_CERTOB.NPS_FIRSTDAY+7)
)
SELECT *
FROM SOMEDATA
) WITH DATA WITH REPLACE ;
WITH SUMBYINVOICE AS ( SELECT DAACCT, DAIDAT, DAINV#, SUM(DAQTY) AS QTY
FROM SESSION.NPS_DATA0
GROUP BY DAACCT, DAIDAT, DAINV#
)
SELECT *
FROM SUMBYINVOICE
WHERE QTY > 0
ORDER BY DAACCT, DAIDAT, DAINV# ;
DROP TABLE SESSION.NPS_DATA0 ;
DROP VARIABLE F_CERTOB.NPS_FIRSTDAY ;
【问题讨论】: