gpt4 book ai didi

SQLSTATE 58004,在 JSON_OBJECT() 中使用 NULL 和 DB2 LUW 中的 LISTAGG 时出现错误 "invalid qnc assigment"

转载 作者:行者123 更新时间:2023-12-04 10:12:06 25 4
gpt4 key购买 nike

似乎有一个有趣的特性组合会导致 Db2 LUW v11.5.0.0 中的错误。要重现,请编写:

CREATE TABLE t (a INT);
INSERT INTO t VALUES (1), (2);

SELECT '[' || listagg(
json_object(
KEY 'a' VALUE a,
KEY 'b' VALUE b
), ','
) WITHIN GROUP (ORDER BY a) || ']'
FROM (
SELECT a, NULL b
FROM t
ORDER BY a
);

我正在使用 LISTAGG解决 Db2 LUW 丢失的问题 JSON_ARRAYAGG支持。

我得到的错误是这样的:

The SQL statement or command failed because of a database system error. (Reason "invalid qnc assigment".). SQLCODE=-901, SQLSTATE=58004, DRIVER=4.7.85



很可能是解析器中的一个错误。似乎没有什么明显的错误。如何防止/解决这种情况?

最佳答案

我找到了一些我想在这里记录的解决方法,以防有人遇到这个问题:

将 NULL 文字转换为特定类型

SELECT '[' || listagg(
json_object(
KEY 'a' VALUE a,
KEY 'b' VALUE b
), ','
) WITHIN GROUP (ORDER BY a) || ']'
FROM (
SELECT a, CAST(NULL AS VARCHAR(1)) b -- Workaround here
FROM t
ORDER BY a
);

转换 JSON_OBJECT 中的值

可能无法知道 b 的类型, 也可以是数字,而不是字符串。

SELECT '[' || listagg(
json_object(
KEY 'a' VALUE a,
KEY 'b' VALUE CAST(b AS VARCHAR(32672)) -- Workaround here
), ','
) WITHIN GROUP (ORDER BY a) || ']'
FROM (
SELECT a, NULL b
FROM t
ORDER BY a
);

删除 ORDER BY 子句,在这种情况下不需要它(如果有 FETCH FIRST 子句,则可能需要)

SELECT '[' || listagg(
json_object(
KEY 'a' VALUE a,
KEY 'b' VALUE b
), ','
) WITHIN GROUP (ORDER BY a) || ']'
FROM (
SELECT a, NULL b
FROM t
-- Workaround here
);

添加一个“混淆”NULL 值的表达式

SELECT '[' || listagg(
json_object(
KEY 'a' VALUE a,
KEY 'b' VALUE COALESCE(b, NULLIF(1, 1)) -- Workaround here
), ','
) WITHIN GROUP (ORDER BY a) || ']'
FROM (
SELECT a, NULL b
FROM t
ORDER BY a
);

所有这些都产生了所需的
1                                  |
-----------------------------------|
[{"a":1,"b":null},{"a":2,"b":null}]|

关于SQLSTATE 58004,在 JSON_OBJECT() 中使用 NULL 和 DB2 LUW 中的 LISTAGG 时出现错误 "invalid qnc assigment",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61286069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com