【发布时间】:2015-11-20 11:59:44
【问题描述】:
我没有找到类似的东西,所以我要解释一下我的麻烦......
执行此查询时
WITH A (DOC_STRING,ROW_NUM) AS
(SELECT CAST('A' AS VARCHAR(1)),1
FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT CAST('B' AS VARCHAR(1)),2
FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT CAST ('C' AS VARCHAR(1)),3
FROM SYSIBM.SYSDUMMY1 )
,C (MAX_NUM) AS
(SELECT COUNT(*) FROM A)
,B (DOC_STRING,ROW_NUM) AS
(SELECT DOC_STRING,ROW_NUM
FROM A
WHERE ROW_NUM = 1
UNION ALL
SELECT CAST (
CONCAT (B.DOC_STRING,A.DOC_STRING)
AS VARCHAR(140))
,B.ROW_NUM
FROM A,B,C
WHERE A.ROW_NUM = B.ROW_NUM + 1
AND A.ROW_NUM <= C.MAX_NUM
)
SELECT * FROM B
WHERE ROW_NUM = (SELECT MAX(ROW_NUM) FROM A)
我收到错误: VALUE AB 太长 SQL 代码:-433,SQL 状态:22001
我在 IBM Data Studio 中启用了跟踪:
[jcc] BEGIN TRACE_DIAGNOSTICS
[jcc][Thread:Worker-28][SQLWarning@aaef651f] java.sql.SQLWarning
[jcc][Thread:Worker-28][SQLWarning@aaef651f][Sqlca@8c3bf3fb] DB2 SQLCA from server
[jcc][Thread:Worker-28][SQLWarning@aaef651f][Sqlca@8c3bf3fb] SqlCode = 347
[jcc][Thread:Worker-28][SQLWarning@aaef651f][Sqlca@8c3bf3fb] SqlErrd = { 0, 0, 53333, 1127202000, 0, 0 }
[jcc][Thread:Worker-28][SQLWarning@aaef651f][Sqlca@8c3bf3fb] SqlErrmc = B
[jcc][Thread:Worker-28][SQLWarning@aaef651f][Sqlca@8c3bf3fb] SqlErrmcTokens = { B }
[jcc][Thread:Worker-28][SQLWarning@aaef651f][Sqlca@8c3bf3fb] SqlErrp = DSNXODML
[jcc][Thread:Worker-28][SQLWarning@aaef651f][Sqlca@8c3bf3fb] SqlState = 01605
[jcc][Thread:Worker-28][SQLWarning@aaef651f][Sqlca@8c3bf3fb] SqlWarn =
[jcc][Thread:Worker-28][SQLWarning@aaef651f] SQL state = 01605
[jcc][Thread:Worker-28][SQLWarning@aaef651f] Error code = 347
[jcc][Thread:Worker-28][SQLWarning@aaef651f] Tokens = B
[jcc][Thread:Worker-28][SQLWarning@aaef651f] Stack trace follows
[jcc] BEGIN TRACE_DIAGNOSTICS
[jcc][Thread:Worker-28][SQLException@11750c6c] java.sql.SQLException
[jcc][Thread:Worker-28][SQLException@11750c6c][Sqlca@a1af1729] DB2 SQLCA from server
[jcc][Thread:Worker-28][SQLException@11750c6c][Sqlca@a1af1729] SqlCode = -433
[jcc][Thread:Worker-28][SQLException@11750c6c][Sqlca@a1af1729] SqlErrd = { 1046, 0, 0, -1, 0, 0 }
[jcc][Thread:Worker-28][SQLException@11750c6c][Sqlca@a1af1729] SqlErrmc = AB
[jcc][Thread:Worker-28][SQLException@11750c6c][Sqlca@a1af1729] SqlErrmcTokens = { AB }
[jcc][Thread:Worker-28][SQLException@11750c6c][Sqlca@a1af1729] SqlErrp = DSNXRSBC
[jcc][Thread:Worker-28][SQLException@11750c6c][Sqlca@a1af1729] SqlState = 22001
[jcc][Thread:Worker-28][SQLException@11750c6c][Sqlca@a1af1729] SqlWarn =
[jcc][Thread:Worker-28][SQLException@11750c6c] SQL state = 22001
[jcc][Thread:Worker-28][SQLException@11750c6c] Error code = -433
[jcc][Thread:Worker-28][SQLException@11750c6c] Tokens = AB
有什么想法吗?
谢谢!
【问题讨论】:
-
什么 DB2 版本和平台?
-
您好 mustaccio,我正在使用 DB2 9 for z/Os...
-
在 DB2 上,
VALUES(...)可用于返回多行(并且您不需要对sysdummy的引用)。您根本不需要C表引用 - 一旦没有“下一个”行,就不会返回更多行。哦,首选语法是明确指定JOINs - 请不要使用隐式连接(逗号分隔的FROM子句)语法。
标签: sql db2 common-table-expression