LISTAGG ON OVERFLOW TRUNCATE 缺少右括号错误

Missing right parenthesis error for LISTAGG ON OVERFLOW TRUNCATE

我正在使用 ON OVERFLOW TRUNCATE 逻辑来实现 LISTAGG 功能。

但是在如下实施时,出现错误

ORA-00907: missing right parenthesis

这里是查询

SELECT IMG.IMG_TYPE, LISTAGG(TO_CHAR(IMG.IMG_NAME), ' ' ON OVERFLOW TRUNCATE )
 WITHIN GROUP (ORDER BY IMG.IMG_TYPE) AS IMAGES
      FROM TBL_VSAT_MST_DETAIL VT 
        INNER JOIN TBL_VSAT_IMAGE_DETAIL IMG ON VT.VSAT_DETAIL_ID = 2414
        WHERE VT.SAP_ID = 'I-OR-GCHP-ENB-9031'
    AND VT.CANDIDATE_ID = 'C1'
        GROUP BY IMG.IMG_TYPE;

如何解决这个错误?

ON OVERFLOW TRUNCATE 仅在大约九年前发布的 Oracle 12c 之后可用。最新版本是 21c。你应该考虑升级。

无论如何,您的查询看起来好像是在内部联接表,而实际上是交叉联接它们。您查看某些 TBL_VSAT_MST_DETAIL 行,然后将所有 TBL_VSAT_IMAGE_DETAIL 行加入其中的每一行。

这就是您所拥有的,使用适当的连接子句编写:

SELECT
  img.img_type,
  LISTAGG(TO_CHAR(img.img_name), ' ' ON OVERFLOW TRUNCATE )
    WITHIN GROUP (ORDER BY img.img_type) AS images
FROM tbl_vsat_mst_detail vt 
CROSS JOIN tbl_vsat_image_detail img
WHERE vt.sap_id = 'I-OR-GCHP-ENB-9031'
  AND vt.candidate_id = 'C1'
  AND vt.vsat_detail_id = 2414
GROUP BY img.img_type;

我想 - 但我只能在这里猜测,因为我什至不知道你的桌子到底是什么样子 - 你想要这样的东西:

SELECT
  img.img_type,
  LISTAGG(img.img_name, ' ') WITHIN GROUP (ORDER BY img.img_name) AS images
FROM tbl_vsat_image_detail img
WHERE img.vsat_id IN
(
  SELECT vt.vsat_id
  FROM tbl_vsat_mst_detail vt 
  WHERE vt.sap_id = 'I-OR-GCHP-ENB-9031'
    AND vt.candidate_id = 'C1'
    AND vt.vsat_detail_id = 2414
)
GROUP BY img.img_type
ORDER BY img.img_type;

也许没有笛卡尔连接,就没有溢出了,问题暂时解决了。